INVENTAIRE DES FORMES
  * multi composantes
   inv_mass_quad_[v]
   2W_v
   (grad_grad_dual_v)

  * scalaires
   (mass_dual)
   (mass_pivot)

FAQ INSTALL
	avec le detail des install de
		boost, spooles, bamg, plotmtv, vtk, ...

DOC
	exemple grad_grad pondere'
	macro automake rheolef et exemple : cf ginac

QUADRATURE
	regarder s'il est possible d'optimiser encore le nb de noeuds
	par des cas particuliers : t, P, T via gauss direct

FORMES
- reference_element_declare.[cc,h] :
  generer depuis un prog C++ dans basis/
  et ajouter la doc sur les elements de reference : triangle.9 ect.

- i_comp: verifier que le nb de comp est correct (div, grad,..)
  multi-comp: utiliser des bases a priori heterogenes :
    exemple : mass(V,V), 2D_D(V,V), avec V=P1*P1*bubble
  get_basis(i_comp) => tables heterogenes aussi

- basis_on_lattice :
  peut-on regrouper basis_on_nodal_basis et 
  basis_on_quadrature en une seule classe ?
  avec des templates specialises ?

- mass : si la transf est lineaire (non-courbe et simplexe),
   alors det_DF est constant et on peut optimiser en ne calculant
   qu'une fois (phi_y otimes phi_x)(hat_xq)
   c'est encore un peu valable pour d'autres form_element
  => ajouter :
    bool geo_element::is_curved () const { return false; }
    bool geo_element::is_simplex () const { return false; }
    bool geo::is_straight () const { return false; }
      => carre : regarde si les bissectrices se coupent a angle droit
      => la transf P1 est lineaire
         similaire pour P et H

    tranf_is_linear == !is_curved && (is_simplex || is_straight)
    Dans le cas des formes ponderees, on ne peut pas factoriser

TRANSFORMATION ISOPARAMETRIQUE:

- geo_element :
  gagnerait a` avoir une classe abstraite :
  pour pouvoir compliquer les choses...

- geo : 
  * lire les info cad de bamg et les convertir en .geo
    dans un format etendu
  * relire ce format etendu
  * pouvoir tirer de ces infos la position des noeuds sur la 
    frontiere de l'element. Comment en deduire la position
    des noeuds internes ? Ya t'il une regle de deplacement des
    noeuds internes ? Voir le bouquin de methodes spectrales

- space
    * deux transformations piola : P1 et iso-parametrique (pour P2)
      x_dof(K,iloc) : si tr=P2, si l'element est non-courbe,
      c'est une transf piola P1 de b.hat_node(hat_K,iloc) sur K
      si l'element est courbe, c'est un acces a la CAO sur la frontiere et
      plus complique autrement... a voir
    => construire la transformation P2 sur les triangles a partir des
       sommets sur la frontiere
    => carre Q2 : comment placer le sommet central ?

- transformation : necessite de revoir geo_element
  pour l'acces a la CAO : abscisses curvilignes sur les
  aretes/faces, et ainsi definir les sommets de reference
  pour un certain degre de transformation

  basis_transformation {
     dehatter (geo_element K, hat_x) -> x
     hatter   (geo_element K, x)     -> hat_x
     DF     (geo_element K, hat_x)
     inv_DF (geo_element K, hat_x)
     det_DF (geo_element K, hat_x)
  };
  qui utilise k = degree de la base
  mais regarde auparavant si geo_element est curviligne ou non.
  => les formes elementaires peuvent avoir une version
  Une autre solution est de calculer une fois pour tte les
  sommets transformes de facon curviligne dans la classe space.
  Ca evite les acces a la CAO de facon repetitive pendant
  l'assemblage.

GEO
	maillages v2 hybrides t/q : verifier que les t sont
	numerotes avant les q; idem pour T/P/H

	upgade : renumerote

BASES NON-NODALES:

- basis_symbolic 
  * retester le generateur optimise de cxx ginac, avec une option
    pour re-basculer en simple generation s'il y a un pb
  * completer les bases sur tous les elements de reference
  * essayer P3 1d
  * reflechir a une base spectrale
  * reflechir a raviart-thomas
  * utiliser momentum(i,p) = p(x[i])
    pour la genetricite de l'algo (extension RT-base-lagrange, etc..)

- geo/geo_element :
  * numeroter les decalages et orientations pour P3 et +
    voir aussi la methode de sherwin pour s'y retrouver...

- P1d : numeroter d'abord 't' puis 'q' dans le maillage
  geo: verifier que la num est correcte en cas de maillages v2
   et v1+upgrade : renumeroter dans cet ordre

- comment decrire RT ?
   basis::eval renvoie un Float, pas un point...
   interpolate(u) : scalaire nodal lagrange 
      	udof[i] := u (space::xdof[i]);
   interpolate(u) : vectoriel RT 
      	udof[i] := space::momentum(K,i,u);
      qui appelle :
        udof[i] := basis::momentum (K,i,uoF)
      on peut evaluer le moment a l'aire d'une formule de
      quadrature : on a interet a grouper le calcul de tous
      les moments :
      	space::momentum (K,u,&uof);

CLARIFICATION :

- bugs
  tst/geo_dom_tst.cc core dump avec dmalloc...
  tst/form_mass_weighted_tst.cc.old...

- verifier que (2/3)*x sort bien en flottants sous
  la forme T(2)/T(3)*x
  => ca sort en double prec...

- comment demarrer depuis cvs sans copier le code genere automatiqt :
  P2.cc n'existe pas, et automake va geuler...
  => faire un script qui fait 'touch P2.cc', puis forcer
  la creation reele qd le generateur executable est plus
  recent. Comment fait-on avec les formes ?

ACCELERER
  dirichlet box-10 P2 : CPU balboa
    47s avant l'opt de la quadrature (cas general)
    10s apres (cas particuliers du tetraedre)
    reste a optimiser l'assemblage de grad_grad et mass
	=> regrouper qd la transf est lineaire (element droit)

