ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/microstructure/src/mstruct_outils.cpp
Revision: 951
Committed: Fri Aug 10 15:17:17 2018 UTC (6 years, 9 months ago) by couturad
File size: 33150 byte(s)
Log Message:
-> Ajout de Project Chrono (voir CMakeLists.txt).
-> Ajout d'un générateur de microstructure basé sur la dynamique des corps rigides (MSTRUCT_GENERATEUR_DCR).
-> Ajout d'un opérateur de décallage de la topologie (MG_CG_OP_TRANSF_DECALLAGE).
-> Retrait de «using namespace std»  (conflit avec namespace chrono) et modification des fichiers affectés.
-> Modification de mailleur2d.cpp afin d'enregistrer un fichier MAGiC (void.magic) lorsque le nombre d'itération dépasse la valeur maximale.

File Contents

# User Rev Content
1 couturad 919 #include "mstruct_outils.h"
2 couturad 926 #include "mg_cg_groupe_forme.h"
3 couturad 919 #include "ot_geometrie.h"
4     #include "mg_maillage.h"
5     #include "fem_maillage.h"
6     #include "mg_cg_forme.h"
7     #include "mg_cg_forme_multi_volume.h"
8     #include "mg_cg_forme_volume.h"
9 couturad 926 #include "ot_tenseur.h"
10     #include "mg_cg_info.h"
11     #include "fem_maillage_quadratique_outils.h"
12 couturad 919 #include <math.h>
13    
14    
15 couturad 951 int MSTRUCT_OUTILS::statistiques_champ_volumique(FEM_SOLUTION* fem_sol,
16 couturad 926 MG_CG_GROUPE_FORME* groupe_forme,
17     BOITE_3D* boite_analyse,
18     double* moyenne,
19     double* ecart_type,
20     double* min,
21     double* max,
22     OT_HISTOGRAMME** tab_histogramme)
23 couturad 919 {
24 couturad 926 int nb_champ = fem_sol->get_nb_champ();
25     double volume_total=0.0;
26     for(int i=0;i<nb_champ;i++)
27 couturad 919 {
28 couturad 926 moyenne[i]=0.0;
29     ecart_type[i]=0.0;
30 couturad 951 min[i]=std::numeric_limits< double >::max();
31     max[i]=std::numeric_limits< double >::min();
32 couturad 926 }
33     std::vector<double*> vector_champ;
34     std::vector<double> vector_volume;
35     LISTE_FEM_ELEMENT3::iterator it;
36     FEM_MAILLAGE* fem_mail = fem_sol->get_maillage();
37     long k=0;
38 couturad 943 for (FEM_ELEMENT3* ele=fem_mail->get_premier_element3(it);ele!=NULL;ele=fem_mail->get_suivant_element3(it))
39 couturad 926 {
40     bool ok=false;
41     if(groupe_forme!=NULL)
42 couturad 919 {
43 couturad 926 TPL_MAP_ENTITE<MG_VOLUME*> tpl_map_volume = groupe_forme->get_tpl_map_volume();
44     TPL_MAP_ENTITE<MG_VOLUME*>::ITERATEUR it_volume;
45     MG_VOLUME* mg_vol=tpl_map_volume.get_premier(it_volume);
46     while(ok==false && mg_vol!=NULL)
47     {
48     if(ele->get_lien_topologie()==mg_vol) ok=true;
49     else mg_vol=tpl_map_volume.get_suivant(it_volume);
50     }
51     } else ok=true;
52     if(boite_analyse!=NULL && ok==true)
53     {
54     BOITE_3D b3d = ele->get_boite_3D();
55     if(!boite_analyse->contient(b3d.get_xcentre(),b3d.get_ycentre(),b3d.get_zcentre())) ok=false;
56 couturad 919 }
57 couturad 926 if(ok==true)
58     {
59     double *champ=new double[nb_champ];
60     double volume;
61     for(int i=0;i<nb_champ;i++)
62     {
63     double unite=fem_mail->get_mg_geometrie()->get_valeur_unite();
64     double val=0.;
65     volume=0;
66     int nbgauss=fem_sol->get_nb_gauss(k);
67     for (int r=0;r<nbgauss;r++)
68 couturad 934 {
69     int degre=ele->get_degre_gauss(nbgauss);
70     double w;
71     double uvw[3];
72     ele->get_pt_gauss(degre,r,w,uvw);
73     double jac[9];
74     int l,c;
75     double det=ele->get_jacobien(jac,uvw,l,c,unite);
76     double valeur=fem_sol->lire(k,i,0,r)*fabs(det);
77     val=val+w*valeur;
78     volume=volume+w*fabs(det);
79     }
80 couturad 926 champ[i] = val;
81     }
82     vector_champ.push_back(champ);
83     vector_volume.push_back(volume);
84     volume_total+=volume;
85     }
86     k++;
87     }
88     long nb_echantillions=vector_champ.size();
89     std::vector<double*>::iterator it_vector_champ;
90     std::vector<double>::iterator it_vector_volume;
91     for(it_vector_champ=vector_champ.begin(),it_vector_volume=vector_volume.begin();it_vector_champ!=vector_champ.end();it_vector_champ++,it_vector_volume++)
92     {
93     double *champ = *it_vector_champ;
94     double volume = *it_vector_volume;
95 couturad 943 for(int i=0;i<nb_champ;i++)
96     {
97     moyenne[i]+=champ[i];
98     if(champ[i]<min[i]) min[i]=champ[i];
99     if(champ[i]>max[i]) max[i]=champ[i];
100     tab_histogramme[i]->ajouter_valeur(champ[i],volume/volume_total);
101     }
102 couturad 919 }
103 couturad 926 for(int i=0;i<nb_champ;i++)
104 couturad 919 {
105 couturad 943 moyenne[i]=moyenne[i]/volume_total;
106 couturad 926 }
107     for(it_vector_champ=vector_champ.begin(),it_vector_volume=vector_volume.begin();it_vector_champ!=vector_champ.end();it_vector_champ++,it_vector_volume++)
108     {
109     double *champ = *it_vector_champ;
110     double volume = *it_vector_volume;
111     for(int i=0;i<nb_champ;i++)
112 couturad 919 {
113 couturad 943 ecart_type[i]+=(champ[i]-moyenne[i])*(champ[i]-moyenne[i]);
114 couturad 919 }
115     }
116 couturad 926 for(it_vector_champ=vector_champ.begin();it_vector_champ!=vector_champ.end();it_vector_champ++) delete [] *it_vector_champ;
117     for(int i=0;i<nb_champ;i++)
118     {
119     ecart_type[i]=ecart_type[i]*(1.0/(nb_echantillions-1.0));
120     ecart_type[i]=sqrt(ecart_type[i]);
121     }
122     return OK;
123 couturad 919 }
124    
125 couturad 951 int MSTRUCT_OUTILS::statistiques_tenseur_orientation(MG_CG_GROUPE_FORME* groupe_forme,
126 couturad 926 BOITE_3D* boite_analyse,
127     double* moyenne,
128     double* ecart_type,
129     double* min,
130 couturad 938 double* max,
131 couturad 951 FEM_MAILLAGE *fem,
132 couturad 938 bool ponderation_volume)
133 couturad 919 {
134 couturad 938 double volume_total=0;
135 couturad 942 std::vector<double> vector_volume;
136 couturad 926 for(int i=0;i<6;i++)
137 couturad 919 {
138 couturad 926 moyenne[i]=0.0;
139     ecart_type[i]=0.0;
140 couturad 951 min[i]=std::numeric_limits< double >::max();
141     max[i]=std::numeric_limits< double >::min();
142 couturad 919 }
143 couturad 926 std::vector<double*> vector_tenseur;
144     std::map<long,MG_CG_FORME*>::iterator it_forme;
145     for(MG_CG_FORME* forme=groupe_forme->get_premiere_mgcg_forme(it_forme);forme!=NULL;forme=groupe_forme->get_suivante_mgcg_forme(it_forme))
146 couturad 919 {
147 couturad 926 BOITE_3D boite_forme = forme->get_boite_3D();
148     bool ok=true;
149     if(boite_analyse!=NULL)
150 couturad 919 {
151 couturad 951 if(boite_analyse->get_intersection(boite_forme)) ok=true;
152 couturad 926 else ok=false;
153 couturad 919 }
154 couturad 926 if(ok)
155     {
156     double axe_forme[3];
157     MG_CG_INFO_VCT_DOUBLE* info_axe = (MG_CG_INFO_VCT_DOUBLE*)forme->get_mgcg_info("AXE");
158     std::vector<double> vct_double = info_axe->get_vct_valeur();
159     axe_forme[0]=vct_double[0];
160     axe_forme[1]=vct_double[1];
161     axe_forme[2]=vct_double[2];
162     double *tenseur = new double[6];
163     tenseur[0] = axe_forme[0]*axe_forme[0];
164     tenseur[1] = axe_forme[1]*axe_forme[1];
165     tenseur[2] = axe_forme[2]*axe_forme[2];
166     tenseur[3] = axe_forme[0]*axe_forme[1];
167     tenseur[4] = axe_forme[0]*axe_forme[2];
168     tenseur[5] = axe_forme[1]*axe_forme[2];
169 couturad 938 if(ponderation_volume)
170     {
171 couturad 951 if(fem==NULL)
172 couturad 938 {
173 couturad 951 if(forme->get_type_forme()==MG_CG_FORME::TYPE_FORME::VOLUME)
174     {
175     MG_CG_FORME_VOLUME* forme_volume = (MG_CG_FORME_VOLUME*)forme;
176     double volume=OT_GEOMETRIE::get_volume(forme_volume->get_mg_volume(),1.0e-06);
177     vector_volume.push_back(volume);
178     volume_total+=volume;
179     }
180     else if(forme->get_type_forme()==MG_CG_FORME::TYPE_FORME::MULTI_VOLUME)
181     {
182     MG_CG_FORME_MULTI_VOLUME* forme_multi_volume = (MG_CG_FORME_MULTI_VOLUME*)forme;
183     std::map<long,MG_VOLUME*>::iterator it_volume;
184     double volume=0;
185     for(MG_VOLUME* vol=forme_multi_volume->get_premier_mg_volume(it_volume);vol!=NULL;vol=forme_multi_volume->get_suivant_mg_volume(it_volume))
186     {
187     volume+=OT_GEOMETRIE::get_volume(vol,1.0e-06);
188     }
189     vector_volume.push_back(volume);
190     volume_total+=volume;
191     }
192 couturad 938 }
193 couturad 951 else
194 couturad 938 {
195 couturad 951 double volume=get_volume_mgcg_forme(forme,fem,boite_analyse);
196 couturad 942 vector_volume.push_back(volume);
197 couturad 938 volume_total+=volume;
198     }
199     }
200 couturad 926 vector_tenseur.push_back(tenseur);
201     }
202 couturad 919 }
203 couturad 926 long nb_forme=vector_tenseur.size();
204     std::vector<double*>::iterator it_tenseur;
205 couturad 942 std::vector<double>::iterator it_volume=vector_volume.begin();
206 couturad 926 for(it_tenseur=vector_tenseur.begin();it_tenseur!=vector_tenseur.end();it_tenseur++)
207 couturad 919 {
208 couturad 926 double* tenseur = *it_tenseur;
209     for(int i=0;i<6;i++)
210 couturad 919 {
211 couturad 942 if(!ponderation_volume)
212     {
213     moyenne[i]+=tenseur[i];
214     if(tenseur[i]<min[i]) min[i]=tenseur[i];
215     if(tenseur[i]>max[i]) max[i]=tenseur[i];
216     }
217     else
218     {
219     double volume=*it_volume;
220     moyenne[i]+=tenseur[i]*volume/volume_total;
221     if(tenseur[i]<min[i]) min[i]=tenseur[i];
222     if(tenseur[i]>max[i]) max[i]=tenseur[i];
223     }
224 couturad 919 }
225 couturad 951 it_volume++;
226 couturad 919 }
227 couturad 942 if(!ponderation_volume)
228 couturad 926 for(int i=0;i<6;i++)
229 couturad 919 {
230 couturad 926 moyenne[i]=moyenne[i]/nb_forme;
231     }
232     for(it_tenseur=vector_tenseur.begin();it_tenseur!=vector_tenseur.end();it_tenseur++)
233     {
234     double* tenseur = *it_tenseur;
235     for(int i=0;i<6;i++)
236 couturad 919 {
237 couturad 926 ecart_type[i]+=(tenseur[i]-moyenne[i])*(tenseur[i]-moyenne[i]);
238 couturad 919 }
239 couturad 926 delete [] *it_tenseur;
240 couturad 919 }
241 couturad 926 for(int i=0;i<6;i++)
242     {
243     ecart_type[i]=ecart_type[i]*(1.0/(nb_forme-1.0));
244     ecart_type[i]=sqrt(ecart_type[i]);
245     }
246     return OK;
247 couturad 919 }
248    
249 couturad 951 int MSTRUCT_OUTILS::statistiques_CAO(BOITE_3D boite_VES,
250     TPL_MAP_ENTITE< MG_CG_FORME* >& tpl_map_forme,
251     long int& nb_forme,
252     long int& nb_volume,
253     double& volume_forme_moyenne,
254     double& volume_forme_ecart_type,
255     double& volume_forme_min,
256     double& volume_forme_max,
257     OT_HISTOGRAMME& volume_forme_histogramme,
258     double& volume_total,
259     double& fraction_volumique,
260     double precision)
261 couturad 919 {
262 couturad 926 double volume_ves = boite_VES.get_volume();
263     nb_forme=0;
264     nb_volume=0;
265     volume_forme_moyenne=0;
266     volume_forme_ecart_type=0;
267 couturad 951 volume_forme_min=std::numeric_limits< double >::max();
268     volume_forme_max=std::numeric_limits< double >::min();
269 couturad 926 volume_total=0;
270     std::vector<double> vector_volume;
271    
272     TPL_MAP_ENTITE<MG_CG_FORME*>::ITERATEUR it_forme;
273     for(MG_CG_FORME* forme=tpl_map_forme.get_premier(it_forme);forme!=NULL;forme=tpl_map_forme.get_suivant(it_forme))
274 couturad 919 {
275 couturad 926 TPL_MAP_ENTITE<MG_VOLUME*> tpl_map_volume;
276     if(forme->get_type_forme()==MG_CG_FORME::TYPE_FORME::VOLUME)
277 couturad 919 {
278 couturad 926 MG_CG_FORME_VOLUME* forme_volume = (MG_CG_FORME_VOLUME*)forme;
279     tpl_map_volume.ajouter(forme_volume->get_mg_volume());
280 couturad 919 }
281 couturad 926 else if(forme->get_type_forme()==MG_CG_FORME::TYPE_FORME::MULTI_VOLUME)
282     {
283     MG_CG_FORME_MULTI_VOLUME* forme_multi_volume = (MG_CG_FORME_MULTI_VOLUME*)forme;
284     std::map<long,MG_VOLUME*>::iterator it_volume;
285     for(MG_VOLUME* vol=forme_multi_volume->get_premier_mg_volume(it_volume);vol!=NULL;vol=forme_multi_volume->get_suivant_mg_volume(it_volume))
286     {
287     tpl_map_volume.ajouter(vol);
288     }
289     }
290     double volume_forme=0;
291     nb_volume += tpl_map_volume.get_nb();
292     TPL_MAP_ENTITE<MG_VOLUME*>::ITERATEUR it_mg_volume;
293     for(MG_VOLUME* vol=tpl_map_volume.get_premier(it_mg_volume);vol!=NULL;vol=tpl_map_volume.get_suivant(it_mg_volume))
294     {
295     volume_forme += OT_GEOMETRIE::get_volume(vol,precision);
296     }
297     vector_volume.push_back(volume_forme);
298 couturad 919 }
299 couturad 926 std::vector<double>::iterator it_data;
300     for(it_data=vector_volume.begin();it_data!=vector_volume.end();it_data++)
301 couturad 919 {
302 couturad 926 double volume = *it_data;
303     volume_total+=volume;
304     if(volume<volume_forme_min) volume_forme_min=volume;
305     if(volume>volume_forme_max) volume_forme_max=volume;
306 couturad 919 }
307 couturad 926 for(it_data=vector_volume.begin();it_data!=vector_volume.end();it_data++)
308     {
309     double volume = *it_data;
310     volume_forme_histogramme.ajouter_valeur(volume,volume/volume_total);
311     }
312     nb_forme=vector_volume.size();
313     volume_forme_moyenne=volume_total/nb_forme;
314     if(nb_forme>1)
315     {
316     for(it_data=vector_volume.begin();it_data!=vector_volume.end();it_data++)
317     {
318     double volume = *it_data;
319     volume_forme_ecart_type+=(volume-volume_forme_moyenne)*(volume-volume_forme_moyenne);
320     }
321     volume_forme_ecart_type=volume_forme_ecart_type*(1.0/(nb_forme-1.0));
322     volume_forme_ecart_type=sqrt(volume_forme_ecart_type);
323     }
324 couturad 951 else volume_forme_ecart_type = 0.0;
325 couturad 926 fraction_volumique = volume_total/volume_ves;
326 couturad 919 }
327    
328 couturad 951 int MSTRUCT_OUTILS::statistiques_mg_maillage(BOITE_3D boite_VES,
329     MG_MAILLAGE* mai,
330     TPL_MAP_ENTITE<MG_CG_FORME*> &tpl_map_forme,
331     long &nb_element_2D,long &nb_element_3D,
332     double& qualite_moyenne_2D, double& qualite_ecart_type_2D, double& qualite_min_2D, double& qualite_max_2D, OT_HISTOGRAMME& histogramme_qualite_2D,
333     double& qualite_moyenne_3D, double& qualite_ecart_type_3D, double& qualite_min_3D, double& qualite_max_3D, OT_HISTOGRAMME& histogramme_qualite_3D,
334     double& taille_moyenne_2D, double& taille_ecart_type_2D, double& taille_min_2D, double& taille_max_2D, OT_HISTOGRAMME& histogramme_taille_2D,
335     double& taille_moyenne_3D, double& taille_ecart_type_3D, double& taille_min_3D, double& taille_max_3D, OT_HISTOGRAMME& histogramme_taille_3D,
336     double& volume, double& fraction_volumique)
337 couturad 919 {
338 couturad 926 double volume_ves = boite_VES.get_volume();
339     nb_element_2D=0;nb_element_3D=0;
340 couturad 951 qualite_moyenne_2D=0;qualite_ecart_type_2D=0;qualite_min_2D=std::numeric_limits< double >::max();;qualite_max_2D=std::numeric_limits< double >::min();
341     qualite_moyenne_3D=0;qualite_ecart_type_3D=0;qualite_min_3D=std::numeric_limits< double >::max();;qualite_max_3D=std::numeric_limits< double >::min();
342     taille_moyenne_2D=0;taille_ecart_type_2D=0;taille_min_2D=std::numeric_limits< double >::max();;taille_max_2D=std::numeric_limits< double >::min();
343     taille_moyenne_3D=0;taille_ecart_type_3D=0;taille_min_3D=std::numeric_limits< double >::max();;taille_max_3D=std::numeric_limits< double >::min();
344 couturad 926 volume=0;fraction_volumique=0;
345     TPL_MAP_ENTITE<MG_ELEMENT_MAILLAGE*> tpl_map_element_maill_3D;
346     TPL_MAP_ENTITE<MG_ELEMENT_MAILLAGE*> tpl_map_element_maill_2D;
347     TPL_MAP_ENTITE<MG_CG_FORME*>::ITERATEUR it_forme;
348     for(MG_CG_FORME* forme=tpl_map_forme.get_premier(it_forme);forme!=NULL;forme=tpl_map_forme.get_suivant(it_forme))
349 couturad 919 {
350 couturad 926 if(forme->get_type_forme()==MG_CG_FORME::TYPE_FORME::VOLUME)
351 couturad 919 {
352 couturad 926 MG_CG_FORME_VOLUME* forme_volume = (MG_CG_FORME_VOLUME*)forme;
353     TPL_SET<MG_ELEMENT_MAILLAGE*> *tmp_maill = forme_volume->get_mg_volume()->get_lien_maillage();
354     TPL_SET<MG_ELEMENT_MAILLAGE*>::ITERATEUR it_maill;
355     for(MG_ELEMENT_MAILLAGE* ele=tmp_maill->get_premier(it_maill);ele!=NULL;ele=tmp_maill->get_suivant(it_maill)) tpl_map_element_maill_3D.ajouter(ele);
356     TPL_MAP_ENTITE<MG_FACE*> tpl_map_face;
357     OT_GEOMETRIE::get_map_mg_face_sous_jacent(forme_volume->get_mg_volume(),tpl_map_face);
358     TPL_MAP_ENTITE<MG_FACE*>::ITERATEUR it_face;
359     for(MG_FACE* face=tpl_map_face.get_premier(it_face);face!=NULL;face=tpl_map_face.get_suivant(it_face))
360     {
361     tmp_maill = face->get_lien_maillage();
362     for(MG_ELEMENT_MAILLAGE* ele=tmp_maill->get_premier(it_maill);ele!=NULL;ele=tmp_maill->get_suivant(it_maill)) tpl_map_element_maill_2D.ajouter(ele);
363     }
364     double volume_i;
365     OT_VECTEUR_3D cdm;
366     OT_MATRICE_3D inertieglobale;
367     OT_MATRICE_3D inertiecdm;
368     forme_volume->get_mg_volume()->get_propriete_massique(mai,volume_i,cdm,inertieglobale,inertiecdm);
369     volume+=volume_i;
370 couturad 919 }
371 couturad 926 else if(forme->get_type_forme()==MG_CG_FORME::TYPE_FORME::MULTI_VOLUME)
372     {
373     MG_CG_FORME_MULTI_VOLUME* forme_multi_volume = (MG_CG_FORME_MULTI_VOLUME*)forme;
374     std::map<long,MG_VOLUME*>::iterator it_volume;
375     for(MG_VOLUME* vol=forme_multi_volume->get_premier_mg_volume(it_volume);vol!=NULL;vol=forme_multi_volume->get_suivant_mg_volume(it_volume))
376     {
377     TPL_SET<MG_ELEMENT_MAILLAGE*> *tmp_maill = vol->get_lien_maillage();
378     TPL_SET<MG_ELEMENT_MAILLAGE*>::ITERATEUR it_maill;
379     for(MG_ELEMENT_MAILLAGE* ele=tmp_maill->get_premier(it_maill);ele!=NULL;ele=tmp_maill->get_suivant(it_maill)) tpl_map_element_maill_3D.ajouter(ele);
380     TPL_MAP_ENTITE<MG_FACE*> tpl_map_face;
381     OT_GEOMETRIE::get_map_mg_face_sous_jacent(vol,tpl_map_face);
382     TPL_MAP_ENTITE<MG_FACE*>::ITERATEUR it_face;
383     for(MG_FACE* face=tpl_map_face.get_premier(it_face);face!=NULL;face=tpl_map_face.get_suivant(it_face))
384     {
385     tmp_maill = face->get_lien_maillage();
386     for(MG_ELEMENT_MAILLAGE* ele=tmp_maill->get_premier(it_maill);ele!=NULL;ele=tmp_maill->get_suivant(it_maill)) tpl_map_element_maill_2D.ajouter(ele);
387     }
388     double volume_i;
389     OT_VECTEUR_3D cdm;
390     OT_MATRICE_3D inertieglobale;
391     OT_MATRICE_3D inertiecdm;
392     vol->get_propriete_massique(mai,volume_i,cdm,inertieglobale,inertiecdm);
393     volume+=volume_i;
394     }
395     }
396 couturad 919 }
397 couturad 926 fraction_volumique = volume/volume_ves;
398     std::vector<double> vector_qualite_3D;
399     std::vector<double> vector_taille_3D;
400     LISTE_MG_TETRA::iterator it_tetra;
401     for(MG_TETRA* tet=mai->get_premier_tetra(it_tetra);tet!=NULL;tet=mai->get_suivant_tetra(it_tetra))
402 couturad 919 {
403 couturad 926 if(tpl_map_element_maill_3D.existe(tet))
404     {
405     double qual=OPERATEUR::qualite_tetra(tet->get_noeud1()->get_coord(),tet->get_noeud2()->get_coord(),tet->get_noeud3()->get_coord(),tet->get_noeud4()->get_coord());
406     vector_qualite_3D.push_back(qual);
407     if(qual<qualite_min_3D) qualite_min_3D=qual;
408     if(qual>qualite_max_3D) qualite_max_3D=qual;
409     qualite_moyenne_3D+=qual;
410     double taille=OPERATEUR::taille_tetra(tet->get_noeud1()->get_coord(),tet->get_noeud2()->get_coord(),tet->get_noeud3()->get_coord(),tet->get_noeud4()->get_coord());
411     vector_taille_3D.push_back(taille);
412     if(taille<taille_min_3D) taille_min_3D=taille;
413     if(taille>taille_max_3D) taille_max_3D=taille;
414     taille_moyenne_3D+=taille;
415     nb_element_3D++;
416     }
417     }
418     qualite_moyenne_3D = qualite_moyenne_3D/nb_element_3D;
419     taille_moyenne_3D = taille_moyenne_3D/nb_element_3D;
420     std::vector<double>::iterator it_qual_3D;
421    
422     for(it_qual_3D=vector_qualite_3D.begin();it_qual_3D!=vector_qualite_3D.end();it_qual_3D++)
423     {
424     double qual = *it_qual_3D;
425     qualite_ecart_type_3D+=(qual-qualite_moyenne_3D)*(qual-qualite_moyenne_3D);
426     histogramme_qualite_3D.ajouter_valeur(qual,1.0/nb_element_3D);
427 couturad 919 }
428 couturad 926 qualite_ecart_type_3D=qualite_ecart_type_3D*(1.0/(nb_element_3D-1.0));
429     qualite_ecart_type_3D=sqrt(qualite_ecart_type_3D);
430    
431     std::vector<double>::iterator it_taille_3D;
432     for(it_taille_3D=vector_taille_3D.begin();it_taille_3D!=vector_taille_3D.end();it_taille_3D++)
433 couturad 919 {
434 couturad 926 double taille = *it_taille_3D;
435     taille_ecart_type_3D=(taille-taille_moyenne_3D)*(taille-taille_moyenne_3D);
436     histogramme_taille_3D.ajouter_valeur(taille,1.0/nb_element_3D);
437     }
438     taille_ecart_type_3D=taille_ecart_type_3D*(1.0/(nb_element_3D-1.0));
439     taille_ecart_type_3D=sqrt(taille_ecart_type_3D);
440    
441    
442    
443     std::vector<double> vector_qualite_2D;
444     std::vector<double> vector_taille_2D;
445     LISTE_MG_TRIANGLE::iterator it_tri;
446     for(MG_TRIANGLE* tri=mai->get_premier_triangle(it_tri);tri!=NULL;tri=mai->get_suivant_triangle(it_tri))
447     {
448     if(tpl_map_element_maill_2D.existe(tri))
449 couturad 919 {
450 couturad 926 double qual=OPERATEUR::qualite_triangle(tri->get_noeud1()->get_coord(),tri->get_noeud2()->get_coord(),tri->get_noeud3()->get_coord());
451     vector_qualite_2D.push_back(qual);
452     if(qual<qualite_min_2D) qualite_min_2D=qual;
453     if(qual>qualite_max_2D) qualite_max_2D=qual;
454     qualite_moyenne_2D+=qual;
455     double taille=OPERATEUR::taille_triangle(tri->get_noeud1()->get_coord(),tri->get_noeud2()->get_coord(),tri->get_noeud3()->get_coord());
456     vector_taille_2D.push_back(taille);
457     if(taille<taille_min_2D) taille_min_2D=taille;
458     if(taille>taille_max_2D) taille_max_2D=taille;
459     taille_moyenne_2D+=taille;
460     nb_element_2D++;
461 couturad 919 }
462 couturad 926 }
463     qualite_moyenne_2D = qualite_moyenne_2D/nb_element_2D;
464     taille_moyenne_2D = taille_moyenne_2D/nb_element_2D;
465     std::vector<double>::iterator it_qual_2D;
466    
467     for(it_qual_2D=vector_qualite_2D.begin();it_qual_2D!=vector_qualite_2D.end();it_qual_2D++)
468     {
469     double qual = *it_qual_2D;
470     qualite_ecart_type_2D+=(qual-qualite_moyenne_2D)*(qual-qualite_moyenne_2D);
471     histogramme_qualite_2D.ajouter_valeur(qual,1.0/nb_element_2D);
472 couturad 919 }
473 couturad 926 qualite_ecart_type_2D=qualite_ecart_type_2D*(1.0/(nb_element_2D-1.0));
474     qualite_ecart_type_2D=sqrt(qualite_ecart_type_2D);
475    
476     std::vector<double>::iterator it_taille_2D;
477     for(it_taille_2D=vector_taille_2D.begin();it_taille_2D!=vector_taille_2D.end();it_taille_2D++)
478 couturad 919 {
479 couturad 926 double taille = *it_taille_2D;
480     taille_ecart_type_2D=(taille-taille_moyenne_2D)*(taille-taille_moyenne_2D);
481     histogramme_taille_2D.ajouter_valeur(taille,1.0/nb_element_2D);
482 couturad 919 }
483 couturad 926 taille_ecart_type_2D=taille_ecart_type_2D*(1.0/(nb_element_2D-1.0));
484     taille_ecart_type_2D=sqrt(taille_ecart_type_2D);
485    
486 couturad 919 }
487    
488    
489 couturad 951 int MSTRUCT_OUTILS::statistiques_fem_maillage(FEM_MAILLAGE* fem,
490     BOITE_3D *boite_analyse,
491     TPL_MAP_ENTITE< MG_CG_FORME* >& tpl_map_forme,
492     long int& nb_element_2D, long int& nb_element_3D,
493     double& jacobien_min_moyenne_2D, double& jacobien_min_ecart_type_2D, double& jacobien_min_min_2D, double& jacobien_min_max_2D, OT_HISTOGRAMME& histogramme_jacobien_min_2D,
494     double& jacobien_max_moyenne_2D, double& jacobien_max_ecart_type_2D, double& jacobien_max_min_2D, double& jacobien_max_max_2D, OT_HISTOGRAMME& histogramme_jacobien_max_2D,
495     double& jacobien_min_moyenne_3D, double& jacobien_min_ecart_type_3D, double& jacobien_min_min_3D, double& jacobien_min_max_3D, OT_HISTOGRAMME& histogramme_jacobien_min_3D,
496     double& jacobien_max_moyenne_3D, double& jacobien_max_ecart_type_3D, double& jacobien_max_min_3D, double& jacobien_max_max_3D, OT_HISTOGRAMME& histogramme_jacobien_max_3D,
497     double& distortion_moyenne_2D, double& distortion_ecart_type_2D, double& distortion_min_2D, double& distortion_max_2D, OT_HISTOGRAMME& histogramme_distortion_2D,
498     double& distortion_moyenne_3D, double& distortion_ecart_type_3D, double& distortion_min_3D, double& distortion_max_3D, OT_HISTOGRAMME& histogramme_distortion_3D,
499     double& volume,
500     double& fraction_volumique)
501 couturad 919 {
502 couturad 931 double volume_ves=0;
503 couturad 926 nb_element_2D=0;nb_element_3D=0;
504 couturad 951 jacobien_min_moyenne_2D=0.0; jacobien_min_ecart_type_2D=0.0; jacobien_min_min_2D=std::numeric_limits< double >::max(); jacobien_min_max_2D=std::numeric_limits< double >::min();
505     jacobien_max_moyenne_2D=0.0; jacobien_max_ecart_type_2D=0.0; jacobien_max_min_2D=std::numeric_limits< double >::max(); jacobien_max_max_2D=std::numeric_limits< double >::min();
506     jacobien_min_moyenne_3D=0.0; jacobien_min_ecart_type_3D=0.0; jacobien_min_min_3D=std::numeric_limits< double >::max(); jacobien_min_max_3D=std::numeric_limits< double >::min();
507     jacobien_max_moyenne_3D=0.0; jacobien_max_ecart_type_3D=0.0; jacobien_max_min_3D=std::numeric_limits< double >::max(); jacobien_max_max_3D=std::numeric_limits< double >::min();
508     distortion_moyenne_2D=0.0; distortion_ecart_type_2D=0.0; distortion_min_2D=std::numeric_limits< double >::max(); distortion_max_2D=std::numeric_limits< double >::min();
509     distortion_moyenne_3D=0.0; distortion_ecart_type_3D=0.0; distortion_min_3D=std::numeric_limits< double >::max(); distortion_max_3D=std::numeric_limits< double >::min();
510 couturad 926 volume=0;
511     fraction_volumique=0;
512    
513 couturad 931 LISTE_FEM_ELEMENT3::iterator it_element3;
514     for(FEM_ELEMENT3* ele3=fem->get_premier_element3(it_element3);ele3!=NULL;ele3=fem->get_suivant_element3(it_element3))
515     {
516     BOITE_3D b3d_ele = ele3->get_boite_3D();
517     if(boite_analyse!=NULL)
518     if(!boite_analyse->contient(b3d_ele.get_xcentre(),b3d_ele.get_ycentre(),b3d_ele.get_zcentre())) continue;
519     int nb_pt_gauss=ele3->get_nb_pt_gauss(ele3->get_degremax_fonction_interpolation());
520     for (int r=0;r<nb_pt_gauss;r++)
521     {
522     int degre=ele3->get_degre_gauss(nb_pt_gauss);
523     double w;
524     double uvw[3];
525     ele3->get_pt_gauss(degre,r,w,uvw);
526     double jac[9];
527     int l,c;
528     double det=ele3->get_jacobien(jac,uvw,l,c);
529     volume_ves+=w*det;
530     }
531     }
532 couturad 926 TPL_MAP_ENTITE<FEM_ELEMENT3*> tpl_map_element_maill_3D;
533     TPL_MAP_ENTITE<FEM_ELEMENT2*> tpl_map_element_maill_2D;
534     TPL_MAP_ENTITE<MG_CG_FORME*>::ITERATEUR it_forme;
535     for(MG_CG_FORME* forme=tpl_map_forme.get_premier(it_forme);forme!=NULL;forme=tpl_map_forme.get_suivant(it_forme))
536 couturad 919 {
537 couturad 926 if(forme->get_type_forme()==MG_CG_FORME::TYPE_FORME::VOLUME)
538 couturad 919 {
539 couturad 926 MG_CG_FORME_VOLUME* forme_volume = (MG_CG_FORME_VOLUME*)forme;
540     TPL_LISTE_ENTITE<FEM_ELEMENT_MAILLAGE*> *tmp_maill = forme_volume->get_mg_volume()->get_lien_fem_maillage();
541     long tmp_nb = tmp_maill->get_nb();
542     for(long i=0;i<tmp_nb;i++)
543 couturad 919 {
544 couturad 926 FEM_ELEMENT3* ele3 = (FEM_ELEMENT3*)tmp_maill->get(i);
545     BOITE_3D b3d_ele = ele3->get_boite_3D();
546     if(boite_analyse!=NULL)
547     if(!boite_analyse->contient(b3d_ele.get_xcentre(),b3d_ele.get_ycentre(),b3d_ele.get_zcentre())) continue;
548     tpl_map_element_maill_3D.ajouter(ele3);
549 couturad 919 }
550 couturad 926 TPL_MAP_ENTITE<MG_FACE*> tpl_map_face;
551     OT_GEOMETRIE::get_map_mg_face_sous_jacent(forme_volume->get_mg_volume(),tpl_map_face);
552     TPL_MAP_ENTITE<MG_FACE*>::ITERATEUR it_face;
553     for(MG_FACE* face=tpl_map_face.get_premier(it_face);face!=NULL;face=tpl_map_face.get_suivant(it_face))
554 couturad 919 {
555 couturad 926 tmp_maill = face->get_lien_fem_maillage();
556     tmp_nb = tmp_maill->get_nb();
557     for(long i=0;i<tmp_nb;i++)
558 couturad 919 {
559 couturad 926 FEM_ELEMENT2* ele2 = (FEM_ELEMENT2*)tmp_maill->get(i);
560     BOITE_3D b3d_ele = ele2->get_boite_3D();
561     if(boite_analyse!=NULL)
562     if(!boite_analyse->contient(b3d_ele.get_xcentre(),b3d_ele.get_ycentre(),b3d_ele.get_zcentre())) continue;
563     tpl_map_element_maill_2D.ajouter(ele2);
564 couturad 919 }
565     }
566     }
567 couturad 926 else if(forme->get_type_forme()==MG_CG_FORME::TYPE_FORME::MULTI_VOLUME)
568     {
569     MG_CG_FORME_MULTI_VOLUME* forme_multi_volume = (MG_CG_FORME_MULTI_VOLUME*)forme;
570     std::map<long,MG_VOLUME*>::iterator it_volume;
571     for(MG_VOLUME* vol=forme_multi_volume->get_premier_mg_volume(it_volume);vol!=NULL;vol=forme_multi_volume->get_suivant_mg_volume(it_volume))
572     {
573     TPL_LISTE_ENTITE<FEM_ELEMENT_MAILLAGE*> *tmp_maill = vol->get_lien_fem_maillage();
574     long tmp_nb = tmp_maill->get_nb();
575     for(long i=0;i<tmp_nb;i++)
576     {
577     FEM_ELEMENT3* ele3 = (FEM_ELEMENT3*)tmp_maill->get(i);
578     BOITE_3D b3d_ele = ele3->get_boite_3D();
579     if(boite_analyse!=NULL)
580     if(!boite_analyse->contient(b3d_ele.get_xcentre(),b3d_ele.get_ycentre(),b3d_ele.get_zcentre())) continue;
581     tpl_map_element_maill_3D.ajouter(ele3);
582     }
583     TPL_MAP_ENTITE<MG_FACE*> tpl_map_face;
584     OT_GEOMETRIE::get_map_mg_face_sous_jacent(vol,tpl_map_face);
585     TPL_MAP_ENTITE<MG_FACE*>::ITERATEUR it_face;
586     for(MG_FACE* face=tpl_map_face.get_premier(it_face);face!=NULL;face=tpl_map_face.get_suivant(it_face))
587     {
588     tmp_maill = face->get_lien_fem_maillage();
589     tmp_nb = tmp_maill->get_nb();
590     for(long i=0;i<tmp_nb;i++)
591     {
592     FEM_ELEMENT2* ele2 = (FEM_ELEMENT2*)tmp_maill->get(i);
593     BOITE_3D b3d_ele = ele2->get_boite_3D();
594     if(boite_analyse!=NULL)
595     if(!boite_analyse->contient(b3d_ele.get_xcentre(),b3d_ele.get_ycentre(),b3d_ele.get_zcentre())) continue;
596     tpl_map_element_maill_2D.ajouter(ele2);
597     }
598     }
599     }
600     }
601 couturad 919 }
602 couturad 926 nb_element_3D=tpl_map_element_maill_3D.get_nb();
603     nb_element_2D=tpl_map_element_maill_2D.get_nb();
604     std::vector<double> vector_jacobien_min_2D;
605     std::vector<double> vector_jacobien_max_2D;
606     std::vector<double> vector_jacobien_min_3D;
607     std::vector<double> vector_jacobien_max_3D;
608     std::vector<double> vector_distortion_2D;
609     std::vector<double> vector_distortion_3D;
610     FEM_MAILLAGE_QUADRATIQUE_OUTILS ot;
611     TPL_MAP_ENTITE<FEM_ELEMENT3*>::ITERATEUR it_ele3;
612     for(FEM_ELEMENT3* ele3=tpl_map_element_maill_3D.get_premier(it_ele3);ele3!=NULL;ele3=tpl_map_element_maill_3D.get_suivant(it_ele3))
613 couturad 919 {
614 couturad 926 int nb_pt_gauss=ele3->get_nb_pt_gauss(ele3->get_degremax_fonction_interpolation());
615     for (int r=0;r<nb_pt_gauss;r++)
616     {
617     int degre=ele3->get_degre_gauss(nb_pt_gauss);
618     double w;
619     double uvw[3];
620     ele3->get_pt_gauss(degre,r,w,uvw);
621     double jac[9];
622     int l,c;
623     double det=ele3->get_jacobien(jac,uvw,l,c);
624     volume+=w*det;
625     }
626     double jmin=ot.get_jmin(ele3);
627     double jmax=ot.get_jmin(ele3);
628     double distortion = ot.get_distorsion2(ele3);
629     vector_jacobien_min_3D.push_back(jmin);
630     vector_jacobien_max_3D.push_back(jmax);
631     vector_distortion_3D.push_back(distortion);
632     jacobien_min_moyenne_3D+=jmin;
633     jacobien_max_moyenne_3D+=jmax;
634     distortion_moyenne_3D+=distortion;
635 couturad 919 }
636 couturad 926 fraction_volumique=volume/volume_ves;
637     jacobien_min_moyenne_3D=jacobien_min_moyenne_3D/nb_element_3D;
638     jacobien_max_moyenne_3D=jacobien_max_moyenne_3D/nb_element_3D;
639     distortion_moyenne_3D=distortion_moyenne_3D/nb_element_3D;
640     std::vector<double>::iterator it_jac_min_3D=vector_jacobien_min_3D.begin();
641     std::vector<double>::iterator it_jac_max_3D=vector_jacobien_max_3D.begin();
642     std::vector<double>::iterator it_dist_3D=vector_distortion_3D.begin();
643     for(long i=0;i<nb_element_3D;i++)
644 couturad 919 {
645 couturad 926 double jmin=*it_jac_min_3D;
646     double jmax=*it_jac_max_3D;
647     double dist=*it_dist_3D;
648     if(jmin<jacobien_min_min_3D)jacobien_min_min_3D=jmin;
649     if(jmin>jacobien_min_max_3D)jacobien_min_max_3D=jmin;
650     if(jmax<jacobien_max_min_3D)jacobien_max_min_3D=jmax;
651     if(jmax>jacobien_max_max_3D)jacobien_max_max_3D=jmax;
652     if(dist<distortion_min_3D)distortion_min_3D=dist;
653     if(dist>distortion_max_3D)distortion_max_3D=dist;
654     jacobien_min_ecart_type_3D=(jmin-jacobien_min_moyenne_3D)*(jmin-jacobien_min_moyenne_3D);
655     jacobien_max_ecart_type_3D=(jmax-jacobien_max_moyenne_3D)*(jmax-jacobien_max_moyenne_3D);
656     distortion_ecart_type_3D=(dist-distortion_moyenne_3D)*(dist-distortion_moyenne_3D);
657     histogramme_jacobien_min_3D.ajouter_valeur(jmin,1.0/nb_element_3D);
658     histogramme_jacobien_max_3D.ajouter_valeur(jmax,1.0/nb_element_3D);
659     histogramme_distortion_3D.ajouter_valeur(dist,1.0/nb_element_3D);
660     it_jac_min_3D++;
661     it_jac_max_3D++;
662     it_dist_3D++;
663 couturad 919 }
664 couturad 926 jacobien_min_ecart_type_3D=sqrt(jacobien_min_ecart_type_3D*(1.0/(nb_element_3D-1.0)));
665     jacobien_max_ecart_type_3D=sqrt(jacobien_max_ecart_type_3D*(1.0/(nb_element_3D-1.0)));
666     distortion_ecart_type_3D=sqrt(distortion_ecart_type_3D*(1.0/(nb_element_3D-1.0)));
667    
668     TPL_MAP_ENTITE<FEM_ELEMENT2*>::ITERATEUR it_ele2;
669     for(FEM_ELEMENT2* ele2=tpl_map_element_maill_2D.get_premier(it_ele2);ele2!=NULL;ele2=tpl_map_element_maill_2D.get_suivant(it_ele2))
670 couturad 919 {
671 couturad 926 double jmin=ot.get_jmin(ele2);
672     double jmax=ot.get_jmin(ele2);
673     double distortion = ot.get_distorsion2(ele2);
674     vector_jacobien_min_2D.push_back(jmin);
675     vector_jacobien_max_2D.push_back(jmax);
676     vector_distortion_2D.push_back(distortion);
677     jacobien_min_moyenne_2D+=jmin;
678     jacobien_max_moyenne_2D+=jmax;
679     distortion_moyenne_2D+=distortion;
680 couturad 919 }
681 couturad 926 jacobien_min_moyenne_2D=jacobien_min_moyenne_2D/nb_element_2D;
682     jacobien_max_moyenne_2D=jacobien_max_moyenne_2D/nb_element_2D;
683     distortion_moyenne_2D=distortion_moyenne_2D/nb_element_2D;
684     std::vector<double>::iterator it_jac_min_2D=vector_jacobien_min_2D.begin();
685     std::vector<double>::iterator it_jac_max_2D=vector_jacobien_max_2D.begin();
686     std::vector<double>::iterator it_dist_2D=vector_distortion_2D.begin();
687     for(long i=0;i<nb_element_2D;i++)
688 couturad 919 {
689 couturad 926 double jmin=*it_jac_min_2D;
690     double jmax=*it_jac_max_2D;
691     double dist=*it_dist_2D;
692     if(jmin<jacobien_min_min_2D)jacobien_min_min_2D=jmin;
693     if(jmin>jacobien_min_max_2D)jacobien_min_max_2D=jmin;
694     if(jmax<jacobien_max_min_2D)jacobien_max_min_2D=jmax;
695     if(jmax>jacobien_max_max_2D)jacobien_max_max_2D=jmax;
696     if(dist<distortion_min_2D)distortion_min_2D=dist;
697     if(dist>distortion_max_2D)distortion_max_2D=dist;
698     jacobien_min_ecart_type_2D=(jmin-jacobien_min_moyenne_2D)*(jmin-jacobien_min_moyenne_2D);
699     jacobien_max_ecart_type_2D=(jmax-jacobien_max_moyenne_2D)*(jmax-jacobien_max_moyenne_2D);
700     distortion_ecart_type_2D=(dist-distortion_moyenne_2D)*(dist-distortion_moyenne_2D);
701     histogramme_jacobien_min_2D.ajouter_valeur(jmin,1.0/nb_element_2D);
702     histogramme_jacobien_max_2D.ajouter_valeur(jmax,1.0/nb_element_2D);
703     histogramme_distortion_2D.ajouter_valeur(dist,1.0/nb_element_2D);
704     it_jac_min_2D++;
705     it_jac_max_2D++;
706     it_dist_2D++;
707 couturad 919 }
708 couturad 926 jacobien_min_ecart_type_2D=sqrt(jacobien_min_ecart_type_2D*(1.0/(nb_element_2D-1.0)));
709     jacobien_max_ecart_type_2D=sqrt(jacobien_max_ecart_type_2D*(1.0/(nb_element_2D-1.0)));
710     distortion_ecart_type_2D=sqrt(distortion_ecart_type_2D*(1.0/(nb_element_2D-1.0)));
711 couturad 919 }
712    
713    
714 couturad 951 double MSTRUCT_OUTILS::get_volume_mgcg_forme(MG_CG_FORME* forme, FEM_MAILLAGE* fem,BOITE_3D* boite_analyse)
715     {
716     TPL_MAP_ENTITE<FEM_ELEMENT3*> tpl_map_element_maill_3D;
717     if(forme->get_type_forme()==MG_CG_FORME::TYPE_FORME::VOLUME)
718     {
719     MG_CG_FORME_VOLUME* forme_volume = (MG_CG_FORME_VOLUME*)forme;
720     TPL_LISTE_ENTITE<FEM_ELEMENT_MAILLAGE*> *tmp_maill = forme_volume->get_mg_volume()->get_lien_fem_maillage();
721     long tmp_nb = tmp_maill->get_nb();
722     for(long i=0;i<tmp_nb;i++)
723     {
724     FEM_ELEMENT3* ele3 = (FEM_ELEMENT3*)tmp_maill->get(i);
725     BOITE_3D b3d_ele = ele3->get_boite_3D();
726     if(boite_analyse!=NULL)
727     if(!boite_analyse->contient(b3d_ele.get_xcentre(),b3d_ele.get_ycentre(),b3d_ele.get_zcentre())) continue;
728     tpl_map_element_maill_3D.ajouter(ele3);
729     }
730     }
731     else if(forme->get_type_forme()==MG_CG_FORME::TYPE_FORME::MULTI_VOLUME)
732     {
733     MG_CG_FORME_MULTI_VOLUME* forme_multi_volume = (MG_CG_FORME_MULTI_VOLUME*)forme;
734     std::map<long,MG_VOLUME*>::iterator it_volume;
735     for(MG_VOLUME* vol=forme_multi_volume->get_premier_mg_volume(it_volume);vol!=NULL;vol=forme_multi_volume->get_suivant_mg_volume(it_volume))
736     {
737     TPL_LISTE_ENTITE<FEM_ELEMENT_MAILLAGE*> *tmp_maill = vol->get_lien_fem_maillage();
738     long tmp_nb = tmp_maill->get_nb();
739     for(long i=0;i<tmp_nb;i++)
740     {
741     FEM_ELEMENT3* ele3 = (FEM_ELEMENT3*)tmp_maill->get(i);
742     BOITE_3D b3d_ele = ele3->get_boite_3D();
743     if(boite_analyse!=NULL)
744     if(!boite_analyse->contient(b3d_ele.get_xcentre(),b3d_ele.get_ycentre(),b3d_ele.get_zcentre())) continue;
745     tpl_map_element_maill_3D.ajouter(ele3);
746     }
747     }
748     }
749     double volume=0;
750     TPL_MAP_ENTITE<FEM_ELEMENT3*>::ITERATEUR it_ele3;
751     for(FEM_ELEMENT3* ele3=tpl_map_element_maill_3D.get_premier(it_ele3);ele3!=NULL;ele3=tpl_map_element_maill_3D.get_suivant(it_ele3))
752     {
753     int nb_pt_gauss=ele3->get_nb_pt_gauss(ele3->get_degremax_fonction_interpolation());
754     for (int r=0;r<nb_pt_gauss;r++)
755     {
756     int degre=ele3->get_degre_gauss(nb_pt_gauss);
757     double w;
758     double uvw[3];
759     ele3->get_pt_gauss(degre,r,w,uvw);
760     double jac[9];
761     int l,c;
762     double det=ele3->get_jacobien(jac,uvw,l,c);
763     volume+=w*det;
764     }
765     }
766     return volume;
767     }
768 couturad 919
769    
770    
771    
772    
773    
774    
775