ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/mailleur/src/mailleur3d_structure.cpp
Revision: 1158
Committed: Thu Jun 13 22:18:49 2024 UTC (10 months, 4 weeks ago) by francois
File size: 15976 byte(s)
Log Message:
compatibilité Ubuntu 22.04
Suppression des refeences à Windows
Ajout d'une banière

File Contents

# User Rev Content
1 francois 1158 //####//------------------------------------------------------------
2     //####//------------------------------------------------------------
3     //####// MAGiC
4     //####// Jean Christophe Cuilliere et Vincent FRANCOIS
5     //####// Departement de Genie Mecanique - UQTR
6     //####//------------------------------------------------------------
7     //####// MAGIC est un projet de recherche de l equipe ERICCA
8     //####// du departement de genie mecanique de l Universite du Quebec a Trois Rivieres
9     //####// http://www.uqtr.ca/ericca
10     //####// http://www.uqtr.ca/
11     //####//------------------------------------------------------------
12     //####//------------------------------------------------------------
13     //####//
14     //####// mailleur3d_structure.cpp
15     //####//
16     //####//------------------------------------------------------------
17     //####//------------------------------------------------------------
18     //####// COPYRIGHT 2000-2024
19     //####// jeu 13 jun 2024 11:58:55 EDT
20     //####//------------------------------------------------------------
21     //####//------------------------------------------------------------
22 chebbi 463 #include <stdio.h>
23     #include <math.h>
24     #include "mg_gestionnaire.h"
25     #include "mailleur3d_structure.h"
26     #include "mg_maillage.h"
27     #include "fem_maillage.h"
28     #include "fem_hexa20.h"
29     #include "mg_geometrie.h"
30 francois 576 #include "mg_sommet_noeud.h"
31     #include "mg_arete_element.h"
32     #include "mg_face_element.h"
33     #include "mg_volume_element.h"
34 chebbi 463 #include <vector>
35    
36    
37 francois 585 struct integrale
38     {
39     double ti;
40     double li;
41     };
42    
43 francois 835 MAILLEUR3D_STRUCTURE::MAILLEUR3D_STRUCTURE(double xmintmp, double xmaxtmp, double ymintmp, double ymaxtmp, double zmintmp, double zmaxtmp,int ntmp, int mtmp, int ktmp,MG_GESTIONNAIRE*gesttmp,int avecgeo,double unit):MAILLEUR(false),xmin(xmintmp),xmax(xmaxtmp),ymin(ymintmp),ymax(ymaxtmp),zmin(zmintmp),zmax(zmaxtmp),n(ntmp),m(mtmp),k(ktmp),gest(gesttmp),geovirtuel(avecgeo),densitevariable(false),unite(unit),nbfonction(0)
44 chebbi 463 {
45     }
46 francois 835 MAILLEUR3D_STRUCTURE::MAILLEUR3D_STRUCTURE( double xmintmp, double xmaxtmp, double ymintmp, double ymaxtmp, double zmintmp, double zmaxtmp,double (*fx)(double),double (*fy)(double),double (*fz)(double),MG_GESTIONNAIRE* gesttmp,int avecgeo,double unit):MAILLEUR(false),xmin(xmintmp),xmax(xmaxtmp),ymin(ymintmp),ymax(ymaxtmp),zmin(zmintmp),zmax(zmaxtmp),gest(gesttmp),geovirtuel(avecgeo),enx(fx),eny(fy),enz(fz),densitevariable(true),unite(unit),nbfonction(0)
47 francois 585 {
48     }
49    
50 chebbi 463 MAILLEUR3D_STRUCTURE::MAILLEUR3D_STRUCTURE( MAILLEUR3D_STRUCTURE& mdd):MAILLEUR(mdd),
51 francois 835 xmin(mdd.xmin),xmax(mdd.xmax),ymin(mdd.ymin),ymax(mdd.ymax),zmin(mdd.zmin),zmax(mdd.zmax),n(mdd.n),m(mdd.m),k(mdd.k),gest(mdd.gest),nbfonction(mdd.nbfonction)
52 chebbi 463 {
53     }
54    
55     MAILLEUR3D_STRUCTURE::~MAILLEUR3D_STRUCTURE()
56     {
57     }
58    
59 francois 585
60     void MAILLEUR3D_STRUCTURE::discretise(std::vector<double> &tab,double min,double max,int &nb,double (*en)(double))
61     {
62     double t1=0;
63     double t2=1;
64     std::vector<integrale> tab_integrale;
65     double ti,tii,t;
66     double longueur_metrique=0.;
67     tii=t1;
68     double dt=1./pas;
69     do
70     {
71     ti=tii;
72     tii=ti+(t2-t1)*dt;
73     if (tii>t2) tii=t2;
74     t=0.7886751345*ti+0.2113248654*tii;
75     double facteur1=(max-min)/(*en)(t);
76     t=0.7886751345*tii+0.2113248654*ti;
77     double facteur2=(max-min)/(*en)(t);
78     longueur_metrique=longueur_metrique+0.5*(tii-ti)*(facteur1+facteur2);
79     integrale pas;
80     pas.ti=ti;
81     pas.li=longueur_metrique;
82     tab_integrale.insert(tab_integrale.end(),pas);
83     }
84     while (tii<t2);
85     nb=(int)floor(longueur_metrique);
86     if (longueur_metrique-floor(longueur_metrique)>0.5) nb++;
87     if (nb<1) nb=1;
88     double valeur_cible=longueur_metrique/nb;
89     tab.push_back(min);
90     int nbcree=0;
91     int nb_pas_integrale=tab_integrale.size();
92     for (int i=0;i<nb_pas_integrale;i++)
93     {
94     while ((tab_integrale[i].li>(nbcree+1)*valeur_cible) && (nbcree<nb-1))
95     {
96     double ti=tab_integrale[i].ti;
97     double tii=t2;
98     double li=0.;
99     if (i!=0) li=tab_integrale[i-1].li;
100     double lii=tab_integrale[i].li;
101     if (i!=nb_pas_integrale-1) tii=tab_integrale[i+1].ti;
102     t=ti+(tii-ti)/(lii-li)*((nbcree+1)*valeur_cible-li);
103     double x=min+t*(max-min);
104     tab.push_back(x);
105     nbcree++;
106     }
107     }
108     tab.push_back(max);
109    
110     }
111 francois 835 void MAILLEUR3D_STRUCTURE::ajouter_fonction_geometrie(int nb)
112     {
113     nbfonction=nb;
114     }
115 francois 585
116 couturad 966 int MAILLEUR3D_STRUCTURE::maille(MG_GROUPE_TOPOLOGIQUE* mggt)
117 chebbi 463 {
118     affiche((char*)"Création d'un maillage MG structuré");
119     double intx, inty, intz;
120 francois 585 std::vector<double> tabx,taby,tabz;
121     if (densitevariable==false)
122     {
123     intx=fabs(xmax-xmin)/n;
124     inty=fabs(ymax-ymin)/m;
125     intz=fabs(zmax-zmin)/k;
126     }
127     else
128     {
129     discretise(tabx,xmin,xmax,n,enx);
130     discretise(taby,ymin,ymax,m,eny);
131     discretise(tabz,zmin,zmax,k,enz);
132     }
133 mejri 750
134 chebbi 463 MG_GEOMETRIE* geo= NULL;
135 francois 576 MG_SOMMET_NOEUD *som1=NULL;
136     MG_SOMMET_NOEUD *som2=NULL;
137     MG_SOMMET_NOEUD *som3=NULL;
138     MG_SOMMET_NOEUD *som4=NULL;
139     MG_SOMMET_NOEUD *som5=NULL;
140     MG_SOMMET_NOEUD *som6=NULL;
141     MG_SOMMET_NOEUD *som7=NULL;
142     MG_SOMMET_NOEUD *som8=NULL;
143     MG_ARETE_ELEMENT* are1=NULL;
144     MG_ARETE_ELEMENT* are2=NULL;
145     MG_ARETE_ELEMENT* are3=NULL;
146     MG_ARETE_ELEMENT* are4=NULL;
147     MG_ARETE_ELEMENT* are5=NULL;
148     MG_ARETE_ELEMENT* are6=NULL;
149     MG_ARETE_ELEMENT* are7=NULL;
150     MG_ARETE_ELEMENT* are8=NULL;
151     MG_ARETE_ELEMENT* are9=NULL;
152     MG_ARETE_ELEMENT* are10=NULL;
153     MG_ARETE_ELEMENT* are11=NULL;
154     MG_ARETE_ELEMENT* are12=NULL;
155     MG_FACE_ELEMENT* face1=NULL;
156     MG_FACE_ELEMENT* face2=NULL;
157     MG_FACE_ELEMENT* face3=NULL;
158     MG_FACE_ELEMENT* face4=NULL;
159     MG_FACE_ELEMENT* face5=NULL;
160     MG_FACE_ELEMENT* face6=NULL;
161     MG_VOLUME_ELEMENT* vol=NULL;
162     if (geovirtuel==true)
163     {
164     geo=new MG_GEOMETRIE((char*)"VIRTUEL",(char*)"VIRTUEL");
165 francois 591 geo->change_valeur_unite(unite);
166 francois 576 gest->ajouter_mg_geometrie(geo);
167 francois 1127 som1=new MG_SOMMET_NOEUD();
168 francois 576 geo->ajouter_mg_sommet(som1);
169 francois 1127 som2=new MG_SOMMET_NOEUD();
170 francois 576 geo->ajouter_mg_sommet(som2);
171 francois 1127 som3=new MG_SOMMET_NOEUD();
172 francois 576 geo->ajouter_mg_sommet(som3);
173 francois 1127 som4=new MG_SOMMET_NOEUD();
174 francois 576 geo->ajouter_mg_sommet(som4);
175 francois 1127 som5=new MG_SOMMET_NOEUD();
176 francois 576 geo->ajouter_mg_sommet(som5);
177 francois 1127 som6=new MG_SOMMET_NOEUD();
178 francois 576 geo->ajouter_mg_sommet(som6);
179 francois 1127 som7=new MG_SOMMET_NOEUD();
180 francois 576 geo->ajouter_mg_sommet(som7);
181 francois 1127 som8=new MG_SOMMET_NOEUD();
182 francois 576 geo->ajouter_mg_sommet(som8);
183     are1=new MG_ARETE_ELEMENT();
184     geo->ajouter_mg_arete(are1);
185     are2=new MG_ARETE_ELEMENT();
186     geo->ajouter_mg_arete(are2);
187     are3=new MG_ARETE_ELEMENT();
188     geo->ajouter_mg_arete(are3);
189     are4=new MG_ARETE_ELEMENT();
190     geo->ajouter_mg_arete(are4);
191     are5=new MG_ARETE_ELEMENT();
192     geo->ajouter_mg_arete(are5);
193     are6=new MG_ARETE_ELEMENT();
194     geo->ajouter_mg_arete(are6);
195     are7=new MG_ARETE_ELEMENT();
196     geo->ajouter_mg_arete(are7);
197     are8=new MG_ARETE_ELEMENT();
198     geo->ajouter_mg_arete(are8);
199     are9=new MG_ARETE_ELEMENT();
200     geo->ajouter_mg_arete(are9);
201     are10=new MG_ARETE_ELEMENT();
202     geo->ajouter_mg_arete(are10);
203     are11=new MG_ARETE_ELEMENT();
204     geo->ajouter_mg_arete(are11);
205     are12=new MG_ARETE_ELEMENT();
206     geo->ajouter_mg_arete(are12);
207     face1=new MG_FACE_ELEMENT();
208     geo->ajouter_mg_face(face1);
209     face2=new MG_FACE_ELEMENT();
210     geo->ajouter_mg_face(face2);
211     face3=new MG_FACE_ELEMENT();
212     geo->ajouter_mg_face(face3);
213     face4=new MG_FACE_ELEMENT();
214     geo->ajouter_mg_face(face4);
215     face5=new MG_FACE_ELEMENT();
216     geo->ajouter_mg_face(face5);
217     face6=new MG_FACE_ELEMENT();
218     geo->ajouter_mg_face(face6);
219     vol=new MG_VOLUME_ELEMENT();
220     geo->ajouter_mg_volume(vol);
221 francois 835 for (int i=0;i<nbfonction;i++)
222     {
223     MG_GEOM_FONCTION *fonc=new MG_GEOM_FONCTION(0);
224     geo->ajouter_mg_geom_fonction(fonc);
225     }
226 francois 576 }
227     MG_MAILLAGE* mai=new MG_MAILLAGE(geo);
228 chebbi 463 gest->ajouter_mg_maillage(mai);
229     std::vector<MG_NOEUD*> vecnod;
230     for (int l=0; l<=k ;l++)
231     {
232     for (int j=0; j<=m;j++)
233     {
234     for (int i=0; i<=n;i++)
235     {
236 francois 576 MG_ELEMENT_TOPOLOGIQUE *topo=NULL;
237     if (geovirtuel)
238     {
239     if ((i==0) && (j==0) && (l==0)) topo=som1;
240     else if ((i==0) && (j==m) && (l==0)) topo=som2;
241     else if ((i==0) && (j==m) && (l==k)) topo=som3;
242     else if ((i==0) && (j==0) && (l==k)) topo=som4;
243     else if ((i==n) && (j==0) && (l==0)) topo=som5;
244     else if ((i==n) && (j==m) && (l==0)) topo=som6;
245     else if ((i==n) && (j==m) && (l==k)) topo=som7;
246     else if ((i==n) && (j==0) && (l==k)) topo=som8;
247     else if ((j==0) && (l==0)) topo=are1;
248     else if ((j==m) && (l==0)) topo=are2;
249     else if ((j==m) && (l==k)) topo=are3;
250     else if ((j==0) && (l==k)) topo=are4;
251     else if ((i==0) && (l==0)) topo=are5;
252     else if ((i==n) && (l==0)) topo=are6;
253     else if ((i==n) && (l==k)) topo=are7;
254     else if ((i==0) && (l==k)) topo=are8;
255     else if ((i==0) && (j==0)) topo=are9;
256     else if ((i==n) && (j==0)) topo=are10;
257     else if ((i==n) && (j==m)) topo=are11;
258     else if ((i==0) && (j==m)) topo=are12;
259     else if (i==0) topo=face1;
260     else if (i==n) topo=face2;
261     else if (j==0) topo=face3;
262     else if (j==m) topo=face4;
263     else if (l==0) topo=face5;
264     else if (l==k) topo=face6;
265     else topo=vol;
266     }
267 francois 585 double x,y,z;
268     if (densitevariable==false)
269     {
270     z=zmin+(l*intz);
271     y=ymin+(j*inty);
272     x=xmin+(i*intx);
273     }
274     else
275     {
276     x=tabx[i];
277     y=taby[j];
278     z=tabz[l];
279     }
280 francois 791 MG_NOEUD* nou=mai->ajouter_mg_noeud(topo,x,y,z,MAGIC::ORIGINE::MAILLEUR_AUTO);
281 chebbi 463 vecnod.push_back(nou);
282 francois 576 if (geovirtuel)
283     {
284     if ((i==0) && (j==0) && (l==0)) som1->change_mg_noeud(nou);
285     else if ((i==0) && (j==m) && (l==0)) som2->change_mg_noeud(nou);
286     else if ((i==0) && (j==m) && (l==k)) som3->change_mg_noeud(nou);
287     else if ((i==0) && (j==0) && (l==k)) som4->change_mg_noeud(nou);
288     else if ((i==n) && (j==0) && (l==0)) som5->change_mg_noeud(nou);
289     else if ((i==n) && (j==m) && (l==0)) som6->change_mg_noeud(nou);
290     else if ((i==n) && (j==m) && (l==k)) som7->change_mg_noeud(nou);
291     else if ((i==n) && (j==0) && (l==k)) som8->change_mg_noeud(nou);
292     }
293     }
294 chebbi 463 }
295     }
296 francois 576 if (geovirtuel)
297     {
298     for(int i=0; i<n;i++)
299     {
300     int j=0,l=0;
301     MG_NOEUD* nod1=vecnod[i+((n+1)*j)+(l*(m+1)*(n+1))];
302     MG_NOEUD* nod2=vecnod[(i+1)+((n+1)*j)+(l*(m+1)*(n+1))];
303 francois 791 mai->ajouter_mg_segment(are1,nod1,nod2,MAGIC::ORIGINE::MAILLEUR_AUTO);
304 francois 576 j=m,l=0;
305     MG_NOEUD* nod3=vecnod[i+((n+1)*j)+(l*(m+1)*(n+1))];
306     MG_NOEUD* nod4=vecnod[(i+1)+((n+1)*j)+(l*(m+1)*(n+1))];
307 francois 791 mai->ajouter_mg_segment(are2,nod3,nod4,MAGIC::ORIGINE::MAILLEUR_AUTO);
308 francois 576 j=m,l=k;
309     MG_NOEUD* nod5=vecnod[i+((n+1)*j)+(l*(m+1)*(n+1))];
310     MG_NOEUD* nod6=vecnod[(i+1)+((n+1)*j)+(l*(m+1)*(n+1))];
311 francois 791 mai->ajouter_mg_segment(are3,nod5,nod6,MAGIC::ORIGINE::MAILLEUR_AUTO);
312 francois 576 j=0,l=k;
313     MG_NOEUD* nod7=vecnod[i+((n+1)*j)+(l*(m+1)*(n+1))];
314     MG_NOEUD* nod8=vecnod[(i+1)+((n+1)*j)+(l*(m+1)*(n+1))];
315 francois 791 mai->ajouter_mg_segment(are4,nod7,nod8,MAGIC::ORIGINE::MAILLEUR_AUTO);
316 francois 576 }
317     for(int j=0; j<m;j++)
318     {
319     int i=0,l=0;
320     MG_NOEUD* nod1=vecnod[i+((n+1)*j)+(l*(m+1)*(n+1))];
321     MG_NOEUD* nod2=vecnod[i+((n+1)*(j+1))+(l*(m+1)*(n+1))];
322 francois 791 mai->ajouter_mg_segment(are5,nod1,nod2,MAGIC::ORIGINE::MAILLEUR_AUTO);
323 francois 576 i=n,l=0;
324     MG_NOEUD* nod3=vecnod[i+((n+1)*j)+(l*(m+1)*(n+1))];
325     MG_NOEUD* nod4=vecnod[i+((n+1)*(j+1))+(l*(m+1)*(n+1))];
326 francois 791 mai->ajouter_mg_segment(are6,nod3,nod4,MAGIC::ORIGINE::MAILLEUR_AUTO);
327 francois 576 i=n,l=k;
328     MG_NOEUD* nod5=vecnod[i+((n+1)*j)+(l*(m+1)*(n+1))];
329     MG_NOEUD* nod6=vecnod[i+((n+1)*(j+1))+(l*(m+1)*(n+1))];
330 francois 791 mai->ajouter_mg_segment(are7,nod5,nod6,MAGIC::ORIGINE::MAILLEUR_AUTO);
331 francois 576 i=0,l=k;
332     MG_NOEUD* nod7=vecnod[i+((n+1)*j)+(l*(m+1)*(n+1))];
333     MG_NOEUD* nod8=vecnod[i+((n+1)*(j+1))+(l*(m+1)*(n+1))];
334 francois 791 mai->ajouter_mg_segment(are8,nod7,nod8,MAGIC::ORIGINE::MAILLEUR_AUTO);
335 francois 576 }
336     for(int l=0; l<k;l++)
337     {
338     int i=0,j=0;
339     MG_NOEUD* nod1=vecnod[i+((n+1)*j)+(l*(m+1)*(n+1))];
340     MG_NOEUD* nod2=vecnod[i+((n+1)*j)+((l+1)*(m+1)*(n+1))];
341 francois 791 mai->ajouter_mg_segment(are9,nod1,nod2,MAGIC::ORIGINE::MAILLEUR_AUTO);
342 francois 576 i=n,j=0;
343     MG_NOEUD* nod3=vecnod[i+((n+1)*j)+(l*(m+1)*(n+1))];
344     MG_NOEUD* nod4=vecnod[i+((n+1)*j)+((l+1)*(m+1)*(n+1))];
345 francois 791 mai->ajouter_mg_segment(are10,nod3,nod4,MAGIC::ORIGINE::MAILLEUR_AUTO);
346 francois 576 i=n,j=m;
347     MG_NOEUD* nod5=vecnod[i+((n+1)*j)+(l*(m+1)*(n+1))];
348     MG_NOEUD* nod6=vecnod[i+((n+1)*j)+((l+1)*(m+1)*(n+1))];
349 francois 791 mai->ajouter_mg_segment(are11,nod5,nod6,MAGIC::ORIGINE::MAILLEUR_AUTO);
350 francois 576 i=0,j=m;
351     MG_NOEUD* nod7=vecnod[i+((n+1)*j)+(l*(m+1)*(n+1))];
352     MG_NOEUD* nod8=vecnod[i+((n+1)*j)+((l+1)*(m+1)*(n+1))];
353 francois 791 mai->ajouter_mg_segment(are12,nod7,nod8,MAGIC::ORIGINE::MAILLEUR_AUTO);
354 francois 576 }
355     for (int j=0;j<m;j++)
356     for (int l=0;l<k;l++)
357     {
358     int i=0;
359     MG_NOEUD* nod1=vecnod[i+((n+1)*j)+(l*(m+1)*(n+1))];
360     MG_NOEUD* nod2=vecnod[i+((n+1)*(j+1))+(l*(m+1)*(n+1))];
361     MG_NOEUD* nod3=vecnod[i+((n+1)*(j+1))+((l+1)*(m+1)*(n+1))];
362     MG_NOEUD* nod4=vecnod[i+((n+1)*j)+((l+1)*(m+1)*(n+1))];
363     i=n;
364     MG_NOEUD* nod5=vecnod[i+((n+1)*j)+(l*(m+1)*(n+1))];
365     MG_NOEUD* nod6=vecnod[i+((n+1)*(j+1))+(l*(m+1)*(n+1))];
366     MG_NOEUD* nod7=vecnod[i+((n+1)*(j+1))+((l+1)*(m+1)*(n+1))];
367     MG_NOEUD* nod8=vecnod[i+((n+1)*j)+((l+1)*(m+1)*(n+1))];
368 francois 791 mai->ajouter_mg_quadrangle(face1,nod1,nod4,nod3,nod2,MAGIC::ORIGINE::MAILLEUR_AUTO);
369     mai->ajouter_mg_quadrangle(face2,nod5,nod6,nod7,nod8,MAGIC::ORIGINE::MAILLEUR_AUTO);
370 francois 576 }
371     for (int i=0;i<n;i++)
372     for (int l=0;l<k;l++)
373     {
374     int j=0;
375     MG_NOEUD* nod1=vecnod[i+((n+1)*j)+(l*(m+1)*(n+1))];
376     MG_NOEUD* nod2=vecnod[(i+1)+((n+1)*j)+(l*(m+1)*(n+1))];
377     MG_NOEUD* nod3=vecnod[(i+1)+((n+1)*j)+((l+1)*(m+1)*(n+1))];
378     MG_NOEUD* nod4=vecnod[i+((n+1)*j)+((l+1)*(m+1)*(n+1))];
379     j=m;
380     MG_NOEUD* nod5=vecnod[i+((n+1)*j)+(l*(m+1)*(n+1))];
381     MG_NOEUD* nod6=vecnod[(i+1)+((n+1)*j)+(l*(m+1)*(n+1))];
382     MG_NOEUD* nod7=vecnod[(i+1)+((n+1)*j)+((l+1)*(m+1)*(n+1))];
383     MG_NOEUD* nod8=vecnod[i+((n+1)*j)+((l+1)*(m+1)*(n+1))];
384 francois 791 mai->ajouter_mg_quadrangle(face3,nod1,nod2,nod3,nod4,MAGIC::ORIGINE::MAILLEUR_AUTO);
385     mai->ajouter_mg_quadrangle(face4,nod7,nod6,nod5,nod8,MAGIC::ORIGINE::MAILLEUR_AUTO);
386 francois 576 }
387     for (int i=0;i<n;i++)
388     for (int j=0;j<m;j++)
389     {
390     int l=0;
391     MG_NOEUD* nod1=vecnod[i+((n+1)*j)+(l*(m+1)*(n+1))];
392     MG_NOEUD* nod2=vecnod[(i+1)+((n+1)*j)+(l*(m+1)*(n+1))];
393     MG_NOEUD* nod3=vecnod[(i+1)+((n+1)*(j+1))+(l*(m+1)*(n+1))];
394     MG_NOEUD* nod4=vecnod[i+((n+1)*(j+1))+(l*(m+1)*(n+1))];
395     l=k;
396     MG_NOEUD* nod5=vecnod[i+((n+1)*j)+(l*(m+1)*(n+1))];
397     MG_NOEUD* nod6=vecnod[(i+1)+((n+1)*j)+(l*(m+1)*(n+1))];
398     MG_NOEUD* nod7=vecnod[(i+1)+((n+1)*(j+1))+(l*(m+1)*(n+1))];
399     MG_NOEUD* nod8=vecnod[i+((n+1)*(j+1))+(l*(m+1)*(n+1))];
400 francois 791 mai->ajouter_mg_quadrangle(face5,nod1,nod4,nod3,nod2,MAGIC::ORIGINE::MAILLEUR_AUTO);
401     mai->ajouter_mg_quadrangle(face6,nod5,nod6,nod7,nod8,MAGIC::ORIGINE::MAILLEUR_AUTO);
402 francois 576 }
403     }
404     for(int l=0; l<k;l++)
405 chebbi 463 {
406     for(int j=0; j<m;j++)
407     {
408     for(int i=0; i<n;i++)
409     {
410     MG_NOEUD* nod1=vecnod[i+((n+1)*j)+(l*(m+1)*(n+1))];
411     MG_NOEUD* nod2=vecnod[(i+1)+((n+1)*j)+(l*(m+1)*(n+1))];
412     MG_NOEUD* nod3=vecnod[(i+1)+(n+1)*(j+1)+(l*(m+1)*(n+1))];
413     MG_NOEUD* nod4=vecnod[i+(n+1)*(j+1)+(l*(m+1)*(n+1))];
414     MG_NOEUD* nod5=vecnod[i+((n+1)*j)+((l+1)*(m+1)*(n+1))];
415     MG_NOEUD* nod6=vecnod[(i+1)+((n+1)*j)+((l+1)*(m+1)*(n+1))];
416     MG_NOEUD* nod7=vecnod[(i+1)+(n+1)*(j+1)+((l+1)*(m+1)*(n+1))];
417     MG_NOEUD* nod8=vecnod[i+(n+1)*(j+1)+((l+1)*(m+1)*(n+1))];
418 francois 791 MG_HEXA *hexa=mai->ajouter_mg_hexa(vol,nod1,nod2,nod3,nod4,nod5,nod6,nod7,nod8,MAGIC::ORIGINE::MAILLEUR_AUTO);
419 francois 576 }
420 chebbi 463 }
421     }
422 francois 465 BOITE_3D b(xmin,ymin,zmin,xmax,ymax,zmax);
423     mai->change_param_structure(b,n,m,k);
424 francois 835 /*affiche((char*)"Création d'un maillage FEM structuré");
425 chebbi 463 FEM_MAILLAGE* fem = new FEM_MAILLAGE(geo, mai,1);
426     gest->ajouter_fem_maillage(fem);
427 francois 835 fem->construire();*/
428 couturad 966 return OK;
429     }