~ubuntu-branches/ubuntu/raring/rheolef/raring-proposed

« back to all changes in this revision

Viewing changes to nfem/basis/TODO

  • Committer: Package Import Robot
  • Author(s): Pierre Saramito, Pierre Saramito, Sylvestre Ledru
  • Date: 2012-05-14 14:02:09 UTC
  • mfrom: (1.1.6)
  • Revision ID: package-import@ubuntu.com-20120514140209-dzbdlidkotyflf9e
Tags: 6.1-1
[ Pierre Saramito ]
* New upstream release 6.1 (minor changes):
  - support arbitrarily polynomial order Pk
  - source code supports g++-4.7 (closes: #671996)

[ Sylvestre Ledru ]
* update of the watch file

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
INVENTAIRE DES FORMES
2
 
  * multi composantes
3
 
   inv_mass_quad_[v]
4
 
   2W_v
5
 
   (grad_grad_dual_v)
6
 
 
7
 
  * scalaires
8
 
   (mass_dual)
9
 
   (mass_pivot)
10
 
 
11
 
FAQ INSTALL
12
 
        avec le detail des install de
13
 
                boost, spooles, bamg, plotmtv, vtk, ...
14
 
 
15
 
DOC
16
 
        exemple grad_grad pondere'
17
 
        macro automake rheolef et exemple : cf ginac
18
 
 
19
 
QUADRATURE
20
 
        regarder s'il est possible d'optimiser encore le nb de noeuds
21
 
        par des cas particuliers : t, P, T via gauss direct
22
 
 
23
 
FORMES
24
 
- reference_element_declare.[cc,h] :
25
 
  generer depuis un prog C++ dans basis/
26
 
  et ajouter la doc sur les elements de reference : triangle.9 ect.
27
 
 
28
 
- i_comp: verifier que le nb de comp est correct (div, grad,..)
29
 
  multi-comp: utiliser des bases a priori heterogenes :
30
 
    exemple : mass(V,V), 2D_D(V,V), avec V=P1*P1*bubble
31
 
  get_basis(i_comp) => tables heterogenes aussi
32
 
 
33
 
- basis_on_lattice :
34
 
  peut-on regrouper basis_on_nodal_basis et 
35
 
  basis_on_quadrature en une seule classe ?
36
 
  avec des templates specialises ?
37
 
 
38
 
- mass : si la transf est lineaire (non-courbe et simplexe),
39
 
   alors det_DF est constant et on peut optimiser en ne calculant
40
 
   qu'une fois (phi_y otimes phi_x)(hat_xq)
41
 
   c'est encore un peu valable pour d'autres form_element
42
 
  => ajouter :
43
 
    bool geo_element::is_curved () const { return false; }
44
 
    bool geo_element::is_simplex () const { return false; }
45
 
    bool geo::is_straight () const { return false; }
46
 
      => carre : regarde si les bissectrices se coupent a angle droit
47
 
      => la transf P1 est lineaire
48
 
         similaire pour P et H
49
 
 
50
 
    tranf_is_linear == !is_curved && (is_simplex || is_straight)
51
 
    Dans le cas des formes ponderees, on ne peut pas factoriser
52
 
 
53
 
TRANSFORMATION ISOPARAMETRIQUE:
54
 
 
55
 
- geo_element :
56
 
  gagnerait a` avoir une classe abstraite :
57
 
  pour pouvoir compliquer les choses...
58
 
 
59
 
- geo : 
60
 
  * lire les info cad de bamg et les convertir en .geo
61
 
    dans un format etendu
62
 
  * relire ce format etendu
63
 
  * pouvoir tirer de ces infos la position des noeuds sur la 
64
 
    frontiere de l'element. Comment en deduire la position
65
 
    des noeuds internes ? Ya t'il une regle de deplacement des
66
 
    noeuds internes ? Voir le bouquin de methodes spectrales
67
 
 
68
 
- space
69
 
    * deux transformations piola : P1 et iso-parametrique (pour P2)
70
 
      x_dof(K,iloc) : si tr=P2, si l'element est non-courbe,
71
 
      c'est une transf piola P1 de b.hat_node(hat_K,iloc) sur K
72
 
      si l'element est courbe, c'est un acces a la CAO sur la frontiere et
73
 
      plus complique autrement... a voir
74
 
    => construire la transformation P2 sur les triangles a partir des
75
 
       sommets sur la frontiere
76
 
    => carre Q2 : comment placer le sommet central ?
77
 
 
78
 
- transformation : necessite de revoir geo_element
79
 
  pour l'acces a la CAO : abscisses curvilignes sur les
80
 
  aretes/faces, et ainsi definir les sommets de reference
81
 
  pour un certain degre de transformation
82
 
 
83
 
  basis_transformation {
84
 
     dehatter (geo_element K, hat_x) -> x
85
 
     hatter   (geo_element K, x)     -> hat_x
86
 
     DF     (geo_element K, hat_x)
87
 
     inv_DF (geo_element K, hat_x)
88
 
     det_DF (geo_element K, hat_x)
89
 
  };
90
 
  qui utilise k = degree de la base
91
 
  mais regarde auparavant si geo_element est curviligne ou non.
92
 
  => les formes elementaires peuvent avoir une version
93
 
  Une autre solution est de calculer une fois pour tte les
94
 
  sommets transformes de facon curviligne dans la classe space.
95
 
  Ca evite les acces a la CAO de facon repetitive pendant
96
 
  l'assemblage.
97
 
 
98
 
GEO
99
 
        maillages v2 hybrides t/q : verifier que les t sont
100
 
        numerotes avant les q; idem pour T/P/H
101
 
 
102
 
        upgade : renumerote
103
 
 
104
 
BASES NON-NODALES:
105
 
 
106
 
- basis_symbolic 
107
 
  * retester le generateur optimise de cxx ginac, avec une option
108
 
    pour re-basculer en simple generation s'il y a un pb
109
 
  * completer les bases sur tous les elements de reference
110
 
  * essayer P3 1d
111
 
  * reflechir a une base spectrale
112
 
  * reflechir a raviart-thomas
113
 
  * utiliser momentum(i,p) = p(x[i])
114
 
    pour la genetricite de l'algo (extension RT-base-lagrange, etc..)
115
 
 
116
 
- geo/geo_element :
117
 
  * numeroter les decalages et orientations pour P3 et +
118
 
    voir aussi la methode de sherwin pour s'y retrouver...
119
 
 
120
 
- P1d : numeroter d'abord 't' puis 'q' dans le maillage
121
 
  geo: verifier que la num est correcte en cas de maillages v2
122
 
   et v1+upgrade : renumeroter dans cet ordre
123
 
 
124
 
- comment decrire RT ?
125
 
   basis::eval renvoie un Float, pas un point...
126
 
   interpolate(u) : scalaire nodal lagrange 
127
 
        udof[i] := u (space::xdof[i]);
128
 
   interpolate(u) : vectoriel RT 
129
 
        udof[i] := space::momentum(K,i,u);
130
 
      qui appelle :
131
 
        udof[i] := basis::momentum (K,i,uoF)
132
 
      on peut evaluer le moment a l'aire d'une formule de
133
 
      quadrature : on a interet a grouper le calcul de tous
134
 
      les moments :
135
 
        space::momentum (K,u,&uof);
136
 
 
137
 
CLARIFICATION :
138
 
 
139
 
- bugs
140
 
  tst/geo_dom_tst.cc core dump avec dmalloc...
141
 
  tst/form_mass_weighted_tst.cc.old...
142
 
 
143
 
- verifier que (2/3)*x sort bien en flottants sous
144
 
  la forme T(2)/T(3)*x
145
 
  => ca sort en double prec...
146
 
 
147
 
- comment demarrer depuis cvs sans copier le code genere automatiqt :
148
 
  P2.cc n'existe pas, et automake va geuler...
149
 
  => faire un script qui fait 'touch P2.cc', puis forcer
150
 
  la creation reele qd le generateur executable est plus
151
 
  recent. Comment fait-on avec les formes ?
152
 
 
153
 
ACCELERER
154
 
  dirichlet box-10 P2 : CPU balboa
155
 
    47s avant l'opt de la quadrature (cas general)
156
 
    10s apres (cas particuliers du tetraedre)
157
 
    reste a optimiser l'assemblage de grad_grad et mass
158
 
        => regrouper qd la transf est lineaire (element droit)
159