On trouvera dans le fichier gibbs.cxx de freefem un implémentation de la méthode décrite. La fonction prend un maillage comme entrée, ressort le même maillage renuméroté en sortie et renvoie un messgae d'erreur éventuel:
typedef struct { float x,y; }rpoint;
typedef long triangle[3];
typedef struct
{
long np, nt;
rpoint *rp;
triangle *tr;
int *ngt, *ng;
} triangulation;
int renum (triangulation * mesh)
![]()
Identifier dans la façon dont renum appelle gibbs ou est le tableau
qui donne le nouveau numéro d'un point en fonction de l'ancien.
![]()
Remplacer l'ancien mailleur par le nouveau dans l'interpreteur DBI2.
(Contacter Pironneau par email pour avoir les fichiers sources si vous ne les
avez pas. Ils seront disponibles ultérieurement dans
ftp:://ftp.ann.jussieu.fr/ pironneau.)
les fichiers sources contiennent: l'interpréteur DBI2 et le mailleur MFH.
Ces deux modules fonctionnent de mainière indépendante, c'est a dire
qu'il faut d'abord lancer DBI2, ce qui produit un fichier "prepmesh.dta" lequel
sert de fichier données pour MFH. DBI2 contient aussi toujours l'ancien
mailleur. Le but de cet exercice est d'intégrer MFH à l'intérieur de DBI2
et donc de retirer l'ancien mailleur. Pour plus de détail voir la description du
projet ci-dessous.
Aide Procedure pour incorporer le nouveau mailleur (dossier meshpp2) dans le nouvel interpreteur (dossier NDBI2).
#nouveau makefile
ndbi2= Analyse.o TestAnal.o ugraph2.o xrgraph.o Fonction.o triangl2.o gibbs2.o
Mesh2.o Xrgraph.o QuadTree.o io.o ppm.o Metrix.o
nbp: TestAnal.o $(ndbi2)
xlC -o dbi TestAnal.o $(ndbi2) -lX11 -lm
#fin de fichier
Ce makefile est compact mais on perd la compilation separée.
( Si par exemple vous changer
ppm.C il faudra faire (sur ibm rs6000 ou le comilo s'appelle xlC)
Note: ne pas allumer l'option -DDRAWING, prevue dans le mailleur pour la mise au point car alors il y aura un conflit d'appel à "initgraphique()" entre DBI et mesh++ en sortie de ce dernier.
xlC -c ppm.C rm dbi make
int maketriau(int argv, char** argv)
int maketriau(int, char**);
#include "ppm.h"
Commentez la ligne
err = MakeTriangulation(...
et rajoutez apres la ligne suivante (save...) la ligne
char** junk; err = maketriau(1,junk);
L'équivalence des champs est comme suit
classe triangulation classe Triangles -------------------- ---------------- for(int i=0;i<Th.nbt;i++) //Th conserve des triangles inutiles if(Th.triangles[i].link) t.nt++; Th.nbt t.np Th.nbv t.rp[i].x Th.vertices[i].r.x t.rp[i].y Th.vertices[i].r.y t.ng[i] Th.vertices[i].ref t.me[i][j] Th.Number(Th.triangles[i][j]) (tester link)Attention, il faut aussi tester Th.triangles[i].det>0 sinon on recupère des triangles ayant un point a l'infini. Enfin il faut aussi éliminer les triangles qui sont dans les trous du domaines.
![]()
Rajouter dans le programme issu de l'exercice précédent
l'appel à la fonction gibbs pour la renumérotation.
![]()
Rajouter dans l'interpréteur le mot reservé "savemesh" avec sa fonctionalité
c'est à dire par exemple: savemesh("test.msh");
Pour faire cela on consultera la leçon suivante ainsi que l'aide çi-dessous.