interface C++ pour sparskit

16 janvier 1996
===============
* definition des classes par compatibilite avec IML++ : 
	vector matrix preconditioner
@ reste sss/uss et dia/jad en matrices
  et    ldlt + iult,milu en preconditioner
--> 1623 lignes

17 janvier 1996
===============
* comptage des references
* classes generiques 
	Occu qui implemente le compteur
	Ptr  qui possede les algos de comptage
	d'ou une classe concrete
		Data
	peut etre geree par
		Vector    = Ptr <Array : Occu>
		MatrixCsr = Ptr <Csr : Occu>
	ou`
		Csr       contient la structure
		MatrixCsr l'interface avec comptage
  ce qui fait racourcirle code...

18 janvier 1996
===============
* essai en s'appuyant sur STL pour les tableaux de base
  il y a encore un petit probleme

19 janvier 1996
===============
* le comptage des references (ptr/occu) semble aller...
  il y a des iterateurs stl 
* la classe de BASE (vecdata) est implementee de deux facon
     - avec stl, qui INITIALISE tjs les tableaux
     - sans stl, on initialise PAS, ce qui fait un gain de temps
                 mais on duplique l'interface de type stl...

@ reste csr = (a,ja,ia) en vec<real> et vec<int>
  => comme ca les structures sont `copiables' independement
     ce qui est assez courant
  => templetizer vec en vec<int> et vec<real>
     on apelle
  	arraydata<T> l'ancien vecdata<T>
	array<T>     le vec<T> avec l'interface STL en ligne
     et class vec : public array<real> {
     		avec dot(), norm(), ...

@ interface STL ?
	csr::const_iterator_real     ak  = m.begin_line_a(i);
	csr::const_iterator_int      ae  = m.end_line_a(i);
	csr::const_iterator_int      jak = m.begin_line_aj(i);
	
	Il faudrait un iterateur qui decremente de 1 la valeur des colonnes !
	L'implementation fortran est trop apparente

	faudrait qque chose de + abstrait
	ou bien le garder en prive'

--> 1313 lignes

21 janvier 1996
===============
* csr=(a,ja,ia) avec des array<T>
* test dnscsr: ok
@ on pourrait declarer (real,int,index) dans une classe config
  et deriver toutes les classes de cela : cf stl
* csr: A*x, A^t*x ok
* reste les e/s, les access aij et les autres formats
--> 1538 lignes

25 janvier 1996
===============
* pour la renumerotation des ssk, voir plutot gibbs
  pour les preconditionneurs autre que ILUT, voir splib (m^ struct donnee !)
@ essayer de faire des listings avec les commentaires fortan en verbatim !

27 janvier 1996
===============
* concatenation des matrices csr
* A*B : un bug dans sparskit lorsque A et B ne sont pas carres (amub: patche)
* A+B, A-B : teste si on doit trier A et B par col croissante
* portage sur KCC (ouf !) avec malloc_dbg, etc..: makefile avec un `if g++'
* introduction de dgn et eye : expressions a` completer
@ faire une sortie matlab sur: cout<<"a=["<<a<<"]\n"; ==> tests de non-regression
--> 2085 lignes

28 janvier 1996
===============
* format de sortie: KCC n'accepte pas le s.form("%ysih", args);
* format matlab: sortie ok
* format HB: ok en carre; ca n'est pas clair avec les matrices rectangulaires
  	sparskit les racourcis a` l'affichage postscript !
	et nist les lit en debordant, et les transpose en ecriture !
? est-ce qu'on a transpose' ou pas (HB=csc) ?
@ extension 2nd membre HB + vecteur matlab
  meme chose en lecture: HB et matlab, mat+vec
--> 2926 lignes

30 janvier 1996
===============
* ok pour la sortie HB
* sortie matlab avec alignement vertical et decimales minimum
* sortie ps noir & blanc
* instanciation des tmpl: le pb de la librairie n'est pas clos...
@ avec le tri, csr a des champs MUTABLES, bien que conceptuellement const.
  => declarer a, ia, ja mulatbles ?
     les tableaux ne changent pas, mais seulement leur contenu...
* sortie ps couleur... reste la lecture des HB !
* debut de lecture HB
@ faudra penser au tests de non-regression sur l'algebre line'aire
--> 4333 lignes

3 fevrier 1996
==============
* ok pour la lecture de l'entete HB; ouf
  dans l'entete, on teste que les lignes fassent au + 80 carac.
@ reste les valeurs: une matrice et ses seconds membres
@ eviter `iotrick.h' dans `out*.c' : pas elegant et pas su^r
@ outml.c devait maigrir avec les options via 'iostream'
--> 4485 lignes

4 fevrier 1996
==============
* ok pour les e/s matrices rectangulaires
  cette fois ca commence a etre solide
@ transposer-sur-place en entree et sortie
  ou symmetriser ou antisymmetriser s'il le faut
  ejecter quand c'est des complexes
@ la matrice 
	animal-s2.hb pose encore pb et 
	airtfc plante le psotscript ` cause de NaN

--> 4351 lignes

5 fevrier 1996
==============
* interfaces iostream avec manipulateurs pour les matrices (hb,...) : robuste.
@ faudrait completer...titre, type, etc: accessibles
  et l'entree csr : symmetriser ou non, etc..
@ et passer a` l'algebre lineaire
* ok pour la sortie avec un second membre ! pour le deuxieme, on se decale;
  il faut stoker des proprietes dans les `streams', ce qui est un
  peut lourd. 
  En entree, il faut en plus le format et la taille (alloc), ...
  et si on veux traiter les seconds membres creux, le type et le "rhsix"
* OUF ! ca y est pour la lecture des fichiers HB !!!!!!!!!
  et avec 2nd membres (denses, quand meme... mais bon, en lecture, c'est
  faisable en creux; en ecriture faut voir...).
  utilisation intensive de `ioskit' cad xalloc sur les ios
--> 4772 lignes

6 fevrier 1996
==============
@ il faudrait definir hbio et l'adresser comme un tableau
  sinon c'est trop limite'. Acces par lseek a`
  - solution exacte (nptr), approchee(nptr) ; nptr=ncol
  - second membre i (nidx), ...             ; nidx=nrow
  - stockage creux des seconds membres
  - ect
* ok pour les seconds membres pleins + les sol init et exactes
  essayer de reduire le code [in|out]hb.c qui n'est plus tres clair

--> 4814 lignes

7 fevrier 1996
==============
* quelque documentation en utilisant la technique de diffpack
  reecriture des fichiers .h en + clair, autodocumente'
--> 5043 lignes

11 fevrier 1996
===============
* essais de la doc html avec latex2html
* debut des preconditionneurs: diag

14 fevrier 1996
===============
* portage des ioskit sur k++
* test de l'algebre matricielle: reprise de A*A, A+A, A-A, rectangulaire
--> 5007 lignes

22 fevrier 1996
===============
* configuration avec autoconf: reste debug/optim
@ faire les tests d'algebre matricielle

26 fevrier 1996
===============
* algebre matricielle: expansion des expressions: vec OP vec, vec OP scalar
  debut de: csr * vec
@ reste a` completer vec OP scalar
@ question: peut-on expanser en ligne:
   y = x + log(x)
   y = x + solve(lower(A),b)
   y = x + solve(upper(A),b)

27 fevrier 1997
===============
* avance'e de Expr<vec> expanse
@ dans les exprs comme y = 1/y + x, on fait ref a` dte a` y
  => on alloue un nouveau pour le y de gauche => pas optimal (cf valarray)
* les expr vec expansees fonctionnent sur kai c++ : style valarray
  pour mat-vec ca marche pas encore
@ reste a` reduire la taille de vec.h, et a` installer csr.h
28 fevrier 1997
===============
* ok mat-vec simple; reste a` composer: (EYE+D+a)*x, a*(x+y), ect..
  mais c'est moins important
1 mars 1997
===========
* gc: p = z + beta*p; provoque une copie temporaire de p a` droite du =
                      pour modifier le membre de gauche
		      apre`s l'affectation, l'ancienne valeur est detruite
		      => pas optimal
      z = M.solve(r); povouque la destruction de l'ancienne valeur de z,
		      et z pointe sur r

      r -= alpha*q;   provoque une copie de sauvegarde de l'ancien r
		      qui coincide avec z, pour que z conserve sa valeur
 on peut gagner en copie
  - en localisant z
  - en faisant des liens 'durs' sans comptage de ref dans les exprs vec-vec

3 mars 1997
===========
* portage simultane avec g++ et k++, apre`s mains deboires
@ il reste encore a` nettoyer les classes Iter et Expr1 dans le cas
  de g++ (sans expansion), et a` faire des BENCHMARKS
     sur blas1, blas2, et cg

5 mars 1997
===========
* blas1: 30 % cpu k++ avec ou sans
  blas2: idem
  gc: idem mais 23 % de memoire en crete
  avec g++, c'est pas terrible (2 fois + lent)
@ lsr: ca plante
@ netoyer dans le cas sans expr.

--> 7210 lignes

6 mars 1997
===========
* ok pour la les matrices creuses par listes associatives: asr
  => whaten et makefish[3d] : rapides
@ netoyer dans le cas sans expr.
@reprendre les benchmarks... sans lire sur fichier (lent), et utiliser [g]prof.
 => faire la part du gain ou non.

11 mars 1997
============
* il y a un pb d'edition de lien avec k++; avec +A (statique ca marche)
* k++ ne marche pas en edition de lien dynamique...ne passe pas -fPIC lors des
  recompiles des templates
  le pb vient des operations binaires csr/diag
* ouf, corrige' pour k++
* avec: vecteurs creux: preliminaire pour l'expansion de A+B A*B
* toute la famille: cg...qmr sur g++

12 mars 1997
============
* reorganisation de l'expansion en ligne: vec + concis
  et a*x avec csr::row qui ressemble aux vecteurs creux pour 
  preparer a*b et a+b
* ok pour k++ et g++
* elim de sparskit pour avoir skit<T> avec des vecteurs creux
@ reste: csrdns, amudia, diamua, a+-b, a*b

14 mars 1997
============
* test des quadruples precision avec Numerical Reciepes
  le resultat est pas joyeux; seul f77-HP s'en sort, et encore,
  ca core-dump avec les fcts renvoyant un real*16...
  le sun s'en sort pas trop mal

17 mars 1997
============
* reecriture des a*d et d*a non expansees
* aussi a+b non expanse

20 mars 1997
============
* sx+sy: version expansee
@ petit pb de comptage de refs...
@ reste les blas3 expanses: d*a, a*d, a+b, a*b

27 mars 1997
============
* pb comptage des refs: vient de exit(0) dans main() qui n'apelle pas les
  destructeurs: utiliser return(0) et ca marche tres bien.
* ok pour a*d expanse (ouf!); reste a+b et a*b... pour a^t*x, d*a et a^t+b c'est + complique'
 
28 mars 1997
============
* ok pour a+b exapnse' (re-ouf!); reste a*b...
@ inconsistence: c = a*a'; c = a'*a; avec les refs pareusseuses, on ne 
  verifie pas que c change de taille; avec les expansions, on le verifie.

29 mars 1997
============
* ok pour a*b non expanse' (re-re-ouf!)
@ a*b de sparskit a l'air de merder (sur a=b=makefish 4) -- a` creuser plus tard
@ faut absolument reduire la taille du code !
--> 10130 lignes

30 mars 1997
============
* ok pour a*b expanse' (enfin!)
* debut de la genericite k++; c'est plus propre
@ reste a` optimiser a+b, etc...et les tests fortran

1 avril 1997
============
* CVS: Lorsqu'on efface un fichier (part dans Attic), 
  puis qu'on le redeclare, mais qu'il n'est pas present dans le diretory, 
  il faut l'extraire de Attic.
    co ~/../archives/skit/src/Attic/vec.c,v
    chmod u+w vec.c
  -> ok

2 avril 1997
============
* passage de vec<T> sur g++; reste a` reverifier k++ et a` passer a` avec<T> et csr<T>
* pour g++, la promotion de type ne marche pas.
  soit on expanse tous les cas
    vec<double> := vec<float> + vec<double>
    vec<double> := vec<double> + vec<float>
  soit on fixe la precision:
    vec<double> := vec<double> + vec<double>
    vec<float> := vec<float> + vec<float>
  ce qui est plus raisonable en taille de fichier
* blas1-dense-no-tmpl ecrit en m4 qui s'expanse en .h
* blas1-sparse-no-tmpl idem: avancee sur avec<T>...
-> 10886 lignes

4 avril 1997
============
* re-portage sur g++: vec<T> et avec<T> : ok
@ reste les expressions ainsi que csr<T> et asr<T> 

5 avril 1997
============
* portage de vec<T> et avec<T> sur k++ en passant blas1-dense-tmpl.h et 
  blas1-dense-tmpl.h en m4. a suivre...
* test de: a=a+b; a=b-a; a=a*b; a=b*a; est correct.
* ok sur k++; menage dans blas-algo.h: supression des OP*() multiples.
* optimise sx+sy, etc... pour que OP*() et OP++() ne fassent pas deux fois
  les parcours de synchronisation: ca demande a` ne pas pouvoir faire 2 fois
  OP*() [si OP++()] ne fait rien : le resultat est en iterateur d'entree pure...
--> 11050 lignes

7 avril 1997
============
* config: teste promote et long double
* ok pour g++ et k++ avec vec<T> et avec<T>; reste csr<T> et asr<T>
@reste a` reorganiser blas-algo.h pour eviter les typedefs ?
--> 11059 lignes

9 avril 1997
============
* pb de compile avec l'opt de code...

16 avril 1997
=============
* csr<T>...suite; pas mal pour k++; revoir avec g++
--> 10719 lignes

26 avril 1997
=============
* csr<T>: ok pour T=double et sur k++ avec/sans tmpl-expr
@ reste g++
--> 10626 lignes

2 mai 1997
==========
* portage g++... salom entre les bugs... portage sun-g++ ok
* k++ sans expr-tmpl: ne marche qu'avec +K0 -O0 !!!

6 mai 1997
==========
* ok pour k++ +K1 -O0 et +K1 -O1; ouf !

20 mai 1997
===========
* g++ pentium: probleme avec les e/s de matrices...

27 mai 1997
===========
* linux: ok avec les e/s

24 juin 1997
===========
* configure: en commun avec rheolef

27 juin 1997
============
* matlab octave sur linux : core dump...

16 juin 1997
============
* matlab octave sur sun : semble correct
* entree de la librairie rheo...

17 juin 1997
============
* suppression de la sauvegarde de rheo_config.h et config.mk
  pour ne pas ecraser une config differente dans un autre environement

19 juillet 1997
===============
* passage de index en Index
* configure + makefile pour les librairies dynamiques
  => ok sur hp avec g++
* probleme avec vtk sur linux : strstream de g++ ?
  => on ne peut pas visualiser les etiquettes (texte) des echelles 
     de couleurs (script colorbar.tcl)

20 juillet 1997
===============
* algo d'uzawa pour bingham analyse' avec kai++ et les traces
  d'allocation de memoire :

  l'optimisation de :

	diag*vec -> expr 
	csr.trans_mult(expr) -> vec

  pourrait permettre l'optimisation de la place memoire,
  dans la boucle interne d'uzawa.

  diag*vec : ressemble fortement a` vec*vec
  trans_mult : a` voir

31 aout 1997
============
* interface de geo avec les mailleurs ghs[3d] et bamg[2d]
  reste a` definir des ligne et/ou des surfaces paramtrees
  et a` utiliser l'auto-adaptation
* border: objet cao qui permet de definir une courbe
  -> envoi au mailleur

24 octobre 1997
===============
* debut de re-ecriture de skit avec des vrais pointeurs:
	a` peine 10% plus lent que fortran-sparskit !
* recherche recursive des donnees et decompression au vol
* reste a fusionner cela en 1 version
* stokes P1-P1 de Nicolas

--> 27087 lignes

27 octobre 1997
===============
* passage en string des char* des noms dans les classes
  -> ok pour hp, sun; pb sur linux.

--> 27586 lignes
