12
avec le detail des install de
13
boost, spooles, bamg, plotmtv, vtk, ...
16
exemple grad_grad pondere'
17
macro automake rheolef et exemple : cf ginac
20
regarder s'il est possible d'optimiser encore le nb de noeuds
21
par des cas particuliers : t, P, T via gauss direct
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.
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
34
peut-on regrouper basis_on_nodal_basis et
35
basis_on_quadrature en une seule classe ?
36
avec des templates specialises ?
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
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
50
tranf_is_linear == !is_curved && (is_simplex || is_straight)
51
Dans le cas des formes ponderees, on ne peut pas factoriser
53
TRANSFORMATION ISOPARAMETRIQUE:
56
gagnerait a` avoir une classe abstraite :
57
pour pouvoir compliquer les choses...
60
* lire les info cad de bamg et les convertir en .geo
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
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 ?
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
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)
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
99
maillages v2 hybrides t/q : verifier que les t sont
100
numerotes avant les q; idem pour T/P/H
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
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..)
117
* numeroter les decalages et orientations pour P3 et +
118
voir aussi la methode de sherwin pour s'y retrouver...
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
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);
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
135
space::momentum (K,u,&uof);
140
tst/geo_dom_tst.cc core dump avec dmalloc...
141
tst/form_mass_weighted_tst.cc.old...
143
- verifier que (2/3)*x sort bien en flottants sous
145
=> ca sort en double prec...
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 ?
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)