ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/microstructure/src/mstruct_outils.cpp
Revision: 1158
Committed: Thu Jun 13 22:18:49 2024 UTC (11 months, 1 week ago) by francois
File size: 52351 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     //####// mstruct_outils.cpp
15     //####//
16     //####//------------------------------------------------------------
17     //####//------------------------------------------------------------
18     //####// COPYRIGHT 2000-2024
19     //####// jeu 13 jun 2024 11:58:57 EDT
20     //####//------------------------------------------------------------
21     //####//------------------------------------------------------------
22 couturad 919 #include "mstruct_outils.h"
23 couturad 926 #include "mg_cg_groupe_forme.h"
24 couturad 919 #include "ot_geometrie.h"
25 couturad 982 #include "mg_geometrie.h"
26 couturad 919 #include "mg_maillage.h"
27     #include "fem_maillage.h"
28     #include "mg_cg_forme.h"
29     #include "mg_cg_forme_multi_volume.h"
30     #include "mg_cg_forme_volume.h"
31 couturad 926 #include "ot_tenseur.h"
32     #include "mg_cg_info.h"
33     #include "fem_maillage_quadratique_outils.h"
34 couturad 919 #include <math.h>
35 couturad 982 #include "mstruct_definition.h"
36 couturad 919
37    
38 couturad 951 int MSTRUCT_OUTILS::statistiques_champ_volumique(FEM_SOLUTION* fem_sol,
39 couturad 926 MG_CG_GROUPE_FORME* groupe_forme,
40     BOITE_3D* boite_analyse,
41     double* moyenne,
42     double* ecart_type,
43     double* min,
44     double* max,
45     OT_HISTOGRAMME** tab_histogramme)
46 couturad 919 {
47 couturad 926 int nb_champ = fem_sol->get_nb_champ();
48     double volume_total=0.0;
49     for(int i=0;i<nb_champ;i++)
50 couturad 919 {
51 couturad 926 moyenne[i]=0.0;
52     ecart_type[i]=0.0;
53 couturad 951 min[i]=std::numeric_limits< double >::max();
54     max[i]=std::numeric_limits< double >::min();
55 couturad 926 }
56     std::vector<double*> vector_champ;
57     std::vector<double> vector_volume;
58     LISTE_FEM_ELEMENT3::iterator it;
59     FEM_MAILLAGE* fem_mail = fem_sol->get_maillage();
60 couturad 971 if(fem_sol->get_entite_solution()==MAGIC::ENTITE_SOLUTION::ENTITE_NOEUD) fem_sol->active_solution(0);
61 couturad 926 long k=0;
62 couturad 943 for (FEM_ELEMENT3* ele=fem_mail->get_premier_element3(it);ele!=NULL;ele=fem_mail->get_suivant_element3(it))
63 couturad 926 {
64     bool ok=false;
65     if(groupe_forme!=NULL)
66 couturad 919 {
67 couturad 926 TPL_MAP_ENTITE<MG_VOLUME*> tpl_map_volume = groupe_forme->get_tpl_map_volume();
68     TPL_MAP_ENTITE<MG_VOLUME*>::ITERATEUR it_volume;
69     MG_VOLUME* mg_vol=tpl_map_volume.get_premier(it_volume);
70     while(ok==false && mg_vol!=NULL)
71     {
72     if(ele->get_lien_topologie()==mg_vol) ok=true;
73     else mg_vol=tpl_map_volume.get_suivant(it_volume);
74     }
75     } else ok=true;
76     if(boite_analyse!=NULL && ok==true)
77     {
78     BOITE_3D b3d = ele->get_boite_3D();
79     if(!boite_analyse->contient(b3d.get_xcentre(),b3d.get_ycentre(),b3d.get_zcentre())) ok=false;
80 couturad 919 }
81 couturad 926 if(ok==true)
82     {
83     double *champ=new double[nb_champ];
84     double volume;
85     for(int i=0;i<nb_champ;i++)
86     {
87     double unite=fem_mail->get_mg_geometrie()->get_valeur_unite();
88     double val=0.;
89     volume=0;
90 couturad 968 if(fem_sol->get_entite_solution()==MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT3_GAUSS)
91     {
92     int nbgauss=fem_sol->get_nb_gauss(k);
93     for (int r=0;r<nbgauss;r++)
94     {
95     int degre=ele->get_degre_gauss(nbgauss);
96     double w;
97     double uvw[3];
98     ele->get_pt_gauss(degre,r,w,uvw);
99     double jac[9];
100 francois 1104 double det=ele->get_jacobien(jac,uvw,unite);
101 couturad 968 double valeur=fem_sol->lire(k,i,0,r)*fabs(det);
102     val=val+w*valeur;
103     volume=volume+w*fabs(det);
104     }
105     }
106     else if(fem_sol->get_entite_solution()==MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT3)
107     {
108     int nb_pt_gauss=ele->get_nb_pt_gauss(ele->get_degremax_fonction_interpolation());
109     for (int r=0;r<nb_pt_gauss;r++)
110     {
111     int degre=ele->get_degre_gauss(nb_pt_gauss);
112     double w;
113     double uvw[3];
114     ele->get_pt_gauss(degre,r,w,uvw);
115     double jac[9];
116 francois 1104 double det=ele->get_jacobien(jac,uvw);
117 couturad 971 volume+=w*fabs(det);
118 couturad 968 }
119     val=fem_sol->lire(k,i,0,0)*volume;
120     }
121 couturad 971 else if(fem_sol->get_entite_solution()==MAGIC::ENTITE_SOLUTION::ENTITE_NOEUD)
122     {
123     double w;
124     double uvw[3];
125     double jac[9];
126     double degmax=ele->get_degremax_fonction_interpolation();
127     int nbfonc=ele->get_nb_fonction_interpolation();
128     int nb_pt_gauss=ele->get_nb_pt_gauss(degmax);
129     for (int r=0;r<nb_pt_gauss;r++)
130     {
131     ele->get_pt_gauss(degmax,r,w,uvw);
132 francois 1104 double detJ=ele->get_jacobien(jac,uvw,unite);
133 couturad 971 double C=0.0;
134     for(int j=0;j<nbfonc;j++)
135     {
136     C+=ele->get_fonction_interpolation(j+1,uvw)*ele->get_fem_noeud(j)->get_solution()*(pow(unite,3));
137     }
138     C=C*w*fabs(detJ);
139     val+=C;
140     volume+=w*fabs(detJ);
141     }
142     }
143 couturad 926 champ[i] = val;
144     }
145     vector_champ.push_back(champ);
146     vector_volume.push_back(volume);
147     volume_total+=volume;
148     }
149     k++;
150 couturad 966 }
151 couturad 926 long nb_echantillions=vector_champ.size();
152     std::vector<double*>::iterator it_vector_champ;
153 couturad 966 std::vector<double>::iterator it_vector_volume=vector_volume.begin();
154     for(it_vector_champ=vector_champ.begin();it_vector_champ!=vector_champ.end();it_vector_champ++)
155 couturad 926 {
156     double *champ = *it_vector_champ;
157     double volume = *it_vector_volume;
158 couturad 943 for(int i=0;i<nb_champ;i++)
159     {
160     moyenne[i]+=champ[i];
161 couturad 974 if((champ[i]/volume)<min[i]) min[i]=champ[i]/volume;
162     if((champ[i]/volume)>max[i]) max[i]=champ[i]/volume;
163     tab_histogramme[i]->ajouter_valeur(champ[i]/volume,volume/volume_total);
164 couturad 943 }
165 couturad 966 it_vector_volume++;
166 couturad 919 }
167 couturad 926 for(int i=0;i<nb_champ;i++)
168 couturad 919 {
169 couturad 943 moyenne[i]=moyenne[i]/volume_total;
170 couturad 926 }
171     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++)
172     {
173     double *champ = *it_vector_champ;
174 couturad 974 double volume = *it_vector_volume;
175 couturad 926 for(int i=0;i<nb_champ;i++)
176 couturad 919 {
177 couturad 974 ecart_type[i]+=((champ[i]/volume)-moyenne[i])*((champ[i]/volume)-moyenne[i]);
178 couturad 919 }
179     }
180 couturad 926 for(it_vector_champ=vector_champ.begin();it_vector_champ!=vector_champ.end();it_vector_champ++) delete [] *it_vector_champ;
181     for(int i=0;i<nb_champ;i++)
182     {
183     ecart_type[i]=ecart_type[i]*(1.0/(nb_echantillions-1.0));
184     ecart_type[i]=sqrt(ecart_type[i]);
185     }
186     return OK;
187 couturad 919 }
188    
189 couturad 951 int MSTRUCT_OUTILS::statistiques_tenseur_orientation(MG_CG_GROUPE_FORME* groupe_forme,
190 couturad 926 BOITE_3D* boite_analyse,
191     double* moyenne,
192     double* ecart_type,
193     double* min,
194 couturad 938 double* max,
195 couturad 951 FEM_MAILLAGE *fem,
196 couturad 938 bool ponderation_volume)
197 couturad 919 {
198 couturad 938 double volume_total=0;
199 couturad 942 std::vector<double> vector_volume;
200 couturad 926 for(int i=0;i<6;i++)
201 couturad 919 {
202 couturad 926 moyenne[i]=0.0;
203     ecart_type[i]=0.0;
204 couturad 951 min[i]=std::numeric_limits< double >::max();
205     max[i]=std::numeric_limits< double >::min();
206 couturad 919 }
207 couturad 926 std::vector<double*> vector_tenseur;
208     std::map<long,MG_CG_FORME*>::iterator it_forme;
209     for(MG_CG_FORME* forme=groupe_forme->get_premiere_mgcg_forme(it_forme);forme!=NULL;forme=groupe_forme->get_suivante_mgcg_forme(it_forme))
210 couturad 919 {
211 couturad 926 BOITE_3D boite_forme = forme->get_boite_3D();
212     bool ok=true;
213     if(boite_analyse!=NULL)
214 couturad 919 {
215 couturad 951 if(boite_analyse->get_intersection(boite_forme)) ok=true;
216 couturad 926 else ok=false;
217 couturad 919 }
218 couturad 926 if(ok)
219     {
220     double axe_forme[3];
221     MG_CG_INFO_VCT_DOUBLE* info_axe = (MG_CG_INFO_VCT_DOUBLE*)forme->get_mgcg_info("AXE");
222 francois 1140 if (info_axe!=NULL)
223     {
224     std::vector<double> vct_double = info_axe->get_vct_valeur();
225     axe_forme[0]=vct_double[0];
226     axe_forme[1]=vct_double[1];
227     axe_forme[2]=vct_double[2];
228     }
229     else
230     {
231     axe_forme[0]=0.;
232     axe_forme[1]=0.;
233     axe_forme[2]=0.;
234     }
235    
236 couturad 926 double *tenseur = new double[6];
237     tenseur[0] = axe_forme[0]*axe_forme[0];
238     tenseur[1] = axe_forme[1]*axe_forme[1];
239     tenseur[2] = axe_forme[2]*axe_forme[2];
240     tenseur[3] = axe_forme[0]*axe_forme[1];
241     tenseur[4] = axe_forme[0]*axe_forme[2];
242     tenseur[5] = axe_forme[1]*axe_forme[2];
243 couturad 938 if(ponderation_volume)
244     {
245 couturad 951 if(fem==NULL)
246 couturad 938 {
247 couturad 951 if(forme->get_type_forme()==MG_CG_FORME::TYPE_FORME::VOLUME)
248     {
249     MG_CG_FORME_VOLUME* forme_volume = (MG_CG_FORME_VOLUME*)forme;
250     double volume=OT_GEOMETRIE::get_volume(forme_volume->get_mg_volume(),1.0e-06);
251     vector_volume.push_back(volume);
252     volume_total+=volume;
253     }
254     else if(forme->get_type_forme()==MG_CG_FORME::TYPE_FORME::MULTI_VOLUME)
255     {
256     MG_CG_FORME_MULTI_VOLUME* forme_multi_volume = (MG_CG_FORME_MULTI_VOLUME*)forme;
257     std::map<long,MG_VOLUME*>::iterator it_volume;
258     double volume=0;
259     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))
260     {
261     volume+=OT_GEOMETRIE::get_volume(vol,1.0e-06);
262     }
263     vector_volume.push_back(volume);
264     volume_total+=volume;
265     }
266 couturad 938 }
267 couturad 951 else
268 couturad 938 {
269 couturad 951 double volume=get_volume_mgcg_forme(forme,fem,boite_analyse);
270 couturad 942 vector_volume.push_back(volume);
271 couturad 938 volume_total+=volume;
272     }
273     }
274 couturad 926 vector_tenseur.push_back(tenseur);
275     }
276 couturad 919 }
277 couturad 926 long nb_forme=vector_tenseur.size();
278     std::vector<double*>::iterator it_tenseur;
279 couturad 942 std::vector<double>::iterator it_volume=vector_volume.begin();
280 couturad 926 for(it_tenseur=vector_tenseur.begin();it_tenseur!=vector_tenseur.end();it_tenseur++)
281 couturad 919 {
282 couturad 926 double* tenseur = *it_tenseur;
283     for(int i=0;i<6;i++)
284 couturad 919 {
285 couturad 942 if(!ponderation_volume)
286     {
287     moyenne[i]+=tenseur[i];
288     if(tenseur[i]<min[i]) min[i]=tenseur[i];
289     if(tenseur[i]>max[i]) max[i]=tenseur[i];
290     }
291     else
292     {
293     double volume=*it_volume;
294     moyenne[i]+=tenseur[i]*volume/volume_total;
295     if(tenseur[i]<min[i]) min[i]=tenseur[i];
296     if(tenseur[i]>max[i]) max[i]=tenseur[i];
297     }
298 couturad 919 }
299 couturad 951 it_volume++;
300 couturad 919 }
301 couturad 942 if(!ponderation_volume)
302 couturad 926 for(int i=0;i<6;i++)
303 couturad 919 {
304 couturad 926 moyenne[i]=moyenne[i]/nb_forme;
305     }
306     for(it_tenseur=vector_tenseur.begin();it_tenseur!=vector_tenseur.end();it_tenseur++)
307     {
308     double* tenseur = *it_tenseur;
309     for(int i=0;i<6;i++)
310 couturad 919 {
311 couturad 926 ecart_type[i]+=(tenseur[i]-moyenne[i])*(tenseur[i]-moyenne[i]);
312 couturad 919 }
313 couturad 926 delete [] *it_tenseur;
314 couturad 919 }
315 couturad 926 for(int i=0;i<6;i++)
316     {
317     ecart_type[i]=ecart_type[i]*(1.0/(nb_forme-1.0));
318     ecart_type[i]=sqrt(ecart_type[i]);
319     }
320     return OK;
321 couturad 919 }
322    
323 couturad 951 int MSTRUCT_OUTILS::statistiques_CAO(BOITE_3D boite_VES,
324     TPL_MAP_ENTITE< MG_CG_FORME* >& tpl_map_forme,
325     long int& nb_forme,
326     long int& nb_volume,
327     double& volume_forme_moyenne,
328     double& volume_forme_ecart_type,
329     double& volume_forme_min,
330     double& volume_forme_max,
331     OT_HISTOGRAMME& volume_forme_histogramme,
332     double& volume_total,
333     double& fraction_volumique,
334     double precision)
335 couturad 919 {
336 couturad 926 double volume_ves = boite_VES.get_volume();
337     nb_forme=0;
338     nb_volume=0;
339     volume_forme_moyenne=0;
340     volume_forme_ecart_type=0;
341 couturad 951 volume_forme_min=std::numeric_limits< double >::max();
342     volume_forme_max=std::numeric_limits< double >::min();
343 couturad 926 volume_total=0;
344     std::vector<double> vector_volume;
345    
346     TPL_MAP_ENTITE<MG_CG_FORME*>::ITERATEUR it_forme;
347     for(MG_CG_FORME* forme=tpl_map_forme.get_premier(it_forme);forme!=NULL;forme=tpl_map_forme.get_suivant(it_forme))
348 couturad 919 {
349 couturad 926 TPL_MAP_ENTITE<MG_VOLUME*> tpl_map_volume;
350     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_map_volume.ajouter(forme_volume->get_mg_volume());
354 couturad 919 }
355 couturad 926 else if(forme->get_type_forme()==MG_CG_FORME::TYPE_FORME::MULTI_VOLUME)
356     {
357     MG_CG_FORME_MULTI_VOLUME* forme_multi_volume = (MG_CG_FORME_MULTI_VOLUME*)forme;
358     std::map<long,MG_VOLUME*>::iterator it_volume;
359     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))
360     {
361     tpl_map_volume.ajouter(vol);
362     }
363     }
364     double volume_forme=0;
365     nb_volume += tpl_map_volume.get_nb();
366     TPL_MAP_ENTITE<MG_VOLUME*>::ITERATEUR it_mg_volume;
367     for(MG_VOLUME* vol=tpl_map_volume.get_premier(it_mg_volume);vol!=NULL;vol=tpl_map_volume.get_suivant(it_mg_volume))
368     {
369     volume_forme += OT_GEOMETRIE::get_volume(vol,precision);
370     }
371     vector_volume.push_back(volume_forme);
372 couturad 919 }
373 couturad 926 std::vector<double>::iterator it_data;
374     for(it_data=vector_volume.begin();it_data!=vector_volume.end();it_data++)
375 couturad 919 {
376 couturad 926 double volume = *it_data;
377     volume_total+=volume;
378     if(volume<volume_forme_min) volume_forme_min=volume;
379     if(volume>volume_forme_max) volume_forme_max=volume;
380 couturad 919 }
381 couturad 926 for(it_data=vector_volume.begin();it_data!=vector_volume.end();it_data++)
382     {
383     double volume = *it_data;
384     volume_forme_histogramme.ajouter_valeur(volume,volume/volume_total);
385     }
386     nb_forme=vector_volume.size();
387     volume_forme_moyenne=volume_total/nb_forme;
388     if(nb_forme>1)
389     {
390     for(it_data=vector_volume.begin();it_data!=vector_volume.end();it_data++)
391     {
392     double volume = *it_data;
393     volume_forme_ecart_type+=(volume-volume_forme_moyenne)*(volume-volume_forme_moyenne);
394     }
395     volume_forme_ecart_type=volume_forme_ecart_type*(1.0/(nb_forme-1.0));
396     volume_forme_ecart_type=sqrt(volume_forme_ecart_type);
397     }
398 couturad 951 else volume_forme_ecart_type = 0.0;
399 francois 1075 fraction_volumique = volume_total/volume_ves;
400     return 0;
401 couturad 919 }
402    
403 couturad 951 int MSTRUCT_OUTILS::statistiques_mg_maillage(BOITE_3D boite_VES,
404     MG_MAILLAGE* mai,
405     TPL_MAP_ENTITE<MG_CG_FORME*> &tpl_map_forme,
406     long &nb_element_2D,long &nb_element_3D,
407     double& qualite_moyenne_2D, double& qualite_ecart_type_2D, double& qualite_min_2D, double& qualite_max_2D, OT_HISTOGRAMME& histogramme_qualite_2D,
408     double& qualite_moyenne_3D, double& qualite_ecart_type_3D, double& qualite_min_3D, double& qualite_max_3D, OT_HISTOGRAMME& histogramme_qualite_3D,
409     double& taille_moyenne_2D, double& taille_ecart_type_2D, double& taille_min_2D, double& taille_max_2D, OT_HISTOGRAMME& histogramme_taille_2D,
410     double& taille_moyenne_3D, double& taille_ecart_type_3D, double& taille_min_3D, double& taille_max_3D, OT_HISTOGRAMME& histogramme_taille_3D,
411     double& volume, double& fraction_volumique)
412 couturad 919 {
413 couturad 926 double volume_ves = boite_VES.get_volume();
414     nb_element_2D=0;nb_element_3D=0;
415 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();
416     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();
417     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();
418     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();
419 couturad 926 volume=0;fraction_volumique=0;
420     TPL_MAP_ENTITE<MG_ELEMENT_MAILLAGE*> tpl_map_element_maill_3D;
421     TPL_MAP_ENTITE<MG_ELEMENT_MAILLAGE*> tpl_map_element_maill_2D;
422     TPL_MAP_ENTITE<MG_CG_FORME*>::ITERATEUR it_forme;
423     for(MG_CG_FORME* forme=tpl_map_forme.get_premier(it_forme);forme!=NULL;forme=tpl_map_forme.get_suivant(it_forme))
424 couturad 919 {
425 couturad 926 if(forme->get_type_forme()==MG_CG_FORME::TYPE_FORME::VOLUME)
426 couturad 919 {
427 couturad 926 MG_CG_FORME_VOLUME* forme_volume = (MG_CG_FORME_VOLUME*)forme;
428     TPL_SET<MG_ELEMENT_MAILLAGE*> *tmp_maill = forme_volume->get_mg_volume()->get_lien_maillage();
429     TPL_SET<MG_ELEMENT_MAILLAGE*>::ITERATEUR it_maill;
430     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);
431     TPL_MAP_ENTITE<MG_FACE*> tpl_map_face;
432     OT_GEOMETRIE::get_map_mg_face_sous_jacent(forme_volume->get_mg_volume(),tpl_map_face);
433     TPL_MAP_ENTITE<MG_FACE*>::ITERATEUR it_face;
434     for(MG_FACE* face=tpl_map_face.get_premier(it_face);face!=NULL;face=tpl_map_face.get_suivant(it_face))
435     {
436     tmp_maill = face->get_lien_maillage();
437     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);
438     }
439 francois 1042 double volume_i,masse_i;
440 couturad 926 OT_VECTEUR_3D cdm;
441     OT_MATRICE_3D inertieglobale;
442     OT_MATRICE_3D inertiecdm;
443 francois 1042 forme_volume->get_mg_volume()->get_propriete_massique(mai,volume_i,masse_i,cdm,inertieglobale,inertiecdm);
444 couturad 926 volume+=volume_i;
445 couturad 919 }
446 couturad 926 else if(forme->get_type_forme()==MG_CG_FORME::TYPE_FORME::MULTI_VOLUME)
447     {
448     MG_CG_FORME_MULTI_VOLUME* forme_multi_volume = (MG_CG_FORME_MULTI_VOLUME*)forme;
449     std::map<long,MG_VOLUME*>::iterator it_volume;
450     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))
451     {
452     TPL_SET<MG_ELEMENT_MAILLAGE*> *tmp_maill = vol->get_lien_maillage();
453     TPL_SET<MG_ELEMENT_MAILLAGE*>::ITERATEUR it_maill;
454     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);
455     TPL_MAP_ENTITE<MG_FACE*> tpl_map_face;
456     OT_GEOMETRIE::get_map_mg_face_sous_jacent(vol,tpl_map_face);
457     TPL_MAP_ENTITE<MG_FACE*>::ITERATEUR it_face;
458     for(MG_FACE* face=tpl_map_face.get_premier(it_face);face!=NULL;face=tpl_map_face.get_suivant(it_face))
459     {
460     tmp_maill = face->get_lien_maillage();
461     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);
462     }
463 francois 1042 double volume_i,masse_i;
464 couturad 926 OT_VECTEUR_3D cdm;
465     OT_MATRICE_3D inertieglobale;
466     OT_MATRICE_3D inertiecdm;
467 francois 1042 vol->get_propriete_massique(mai,volume_i,masse_i,cdm,inertieglobale,inertiecdm);
468 couturad 926 volume+=volume_i;
469     }
470     }
471 couturad 919 }
472 couturad 926 fraction_volumique = volume/volume_ves;
473     std::vector<double> vector_qualite_3D;
474     std::vector<double> vector_taille_3D;
475     LISTE_MG_TETRA::iterator it_tetra;
476     for(MG_TETRA* tet=mai->get_premier_tetra(it_tetra);tet!=NULL;tet=mai->get_suivant_tetra(it_tetra))
477 couturad 919 {
478 couturad 926 if(tpl_map_element_maill_3D.existe(tet))
479     {
480     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());
481     vector_qualite_3D.push_back(qual);
482     if(qual<qualite_min_3D) qualite_min_3D=qual;
483     if(qual>qualite_max_3D) qualite_max_3D=qual;
484     qualite_moyenne_3D+=qual;
485     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());
486     vector_taille_3D.push_back(taille);
487     if(taille<taille_min_3D) taille_min_3D=taille;
488     if(taille>taille_max_3D) taille_max_3D=taille;
489     taille_moyenne_3D+=taille;
490     nb_element_3D++;
491     }
492     }
493     qualite_moyenne_3D = qualite_moyenne_3D/nb_element_3D;
494     taille_moyenne_3D = taille_moyenne_3D/nb_element_3D;
495     std::vector<double>::iterator it_qual_3D;
496    
497     for(it_qual_3D=vector_qualite_3D.begin();it_qual_3D!=vector_qualite_3D.end();it_qual_3D++)
498     {
499     double qual = *it_qual_3D;
500     qualite_ecart_type_3D+=(qual-qualite_moyenne_3D)*(qual-qualite_moyenne_3D);
501     histogramme_qualite_3D.ajouter_valeur(qual,1.0/nb_element_3D);
502 couturad 919 }
503 couturad 926 qualite_ecart_type_3D=qualite_ecart_type_3D*(1.0/(nb_element_3D-1.0));
504     qualite_ecart_type_3D=sqrt(qualite_ecart_type_3D);
505    
506     std::vector<double>::iterator it_taille_3D;
507     for(it_taille_3D=vector_taille_3D.begin();it_taille_3D!=vector_taille_3D.end();it_taille_3D++)
508 couturad 919 {
509 couturad 926 double taille = *it_taille_3D;
510     taille_ecart_type_3D=(taille-taille_moyenne_3D)*(taille-taille_moyenne_3D);
511     histogramme_taille_3D.ajouter_valeur(taille,1.0/nb_element_3D);
512     }
513     taille_ecart_type_3D=taille_ecart_type_3D*(1.0/(nb_element_3D-1.0));
514     taille_ecart_type_3D=sqrt(taille_ecart_type_3D);
515    
516    
517    
518     std::vector<double> vector_qualite_2D;
519     std::vector<double> vector_taille_2D;
520     LISTE_MG_TRIANGLE::iterator it_tri;
521     for(MG_TRIANGLE* tri=mai->get_premier_triangle(it_tri);tri!=NULL;tri=mai->get_suivant_triangle(it_tri))
522     {
523     if(tpl_map_element_maill_2D.existe(tri))
524 couturad 919 {
525 couturad 926 double qual=OPERATEUR::qualite_triangle(tri->get_noeud1()->get_coord(),tri->get_noeud2()->get_coord(),tri->get_noeud3()->get_coord());
526     vector_qualite_2D.push_back(qual);
527     if(qual<qualite_min_2D) qualite_min_2D=qual;
528     if(qual>qualite_max_2D) qualite_max_2D=qual;
529     qualite_moyenne_2D+=qual;
530     double taille=OPERATEUR::taille_triangle(tri->get_noeud1()->get_coord(),tri->get_noeud2()->get_coord(),tri->get_noeud3()->get_coord());
531     vector_taille_2D.push_back(taille);
532     if(taille<taille_min_2D) taille_min_2D=taille;
533     if(taille>taille_max_2D) taille_max_2D=taille;
534     taille_moyenne_2D+=taille;
535     nb_element_2D++;
536 couturad 919 }
537 couturad 926 }
538     qualite_moyenne_2D = qualite_moyenne_2D/nb_element_2D;
539     taille_moyenne_2D = taille_moyenne_2D/nb_element_2D;
540     std::vector<double>::iterator it_qual_2D;
541    
542     for(it_qual_2D=vector_qualite_2D.begin();it_qual_2D!=vector_qualite_2D.end();it_qual_2D++)
543     {
544     double qual = *it_qual_2D;
545     qualite_ecart_type_2D+=(qual-qualite_moyenne_2D)*(qual-qualite_moyenne_2D);
546     histogramme_qualite_2D.ajouter_valeur(qual,1.0/nb_element_2D);
547 couturad 919 }
548 couturad 926 qualite_ecart_type_2D=qualite_ecart_type_2D*(1.0/(nb_element_2D-1.0));
549     qualite_ecart_type_2D=sqrt(qualite_ecart_type_2D);
550    
551     std::vector<double>::iterator it_taille_2D;
552     for(it_taille_2D=vector_taille_2D.begin();it_taille_2D!=vector_taille_2D.end();it_taille_2D++)
553 couturad 919 {
554 couturad 926 double taille = *it_taille_2D;
555     taille_ecart_type_2D=(taille-taille_moyenne_2D)*(taille-taille_moyenne_2D);
556     histogramme_taille_2D.ajouter_valeur(taille,1.0/nb_element_2D);
557 couturad 919 }
558 couturad 926 taille_ecart_type_2D=taille_ecart_type_2D*(1.0/(nb_element_2D-1.0));
559     taille_ecart_type_2D=sqrt(taille_ecart_type_2D);
560 francois 1075 return 0;
561 couturad 919 }
562    
563    
564 couturad 951 int MSTRUCT_OUTILS::statistiques_fem_maillage(FEM_MAILLAGE* fem,
565     BOITE_3D *boite_analyse,
566     TPL_MAP_ENTITE< MG_CG_FORME* >& tpl_map_forme,
567     long int& nb_element_2D, long int& nb_element_3D,
568     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,
569     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,
570     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,
571     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,
572     double& distortion_moyenne_2D, double& distortion_ecart_type_2D, double& distortion_min_2D, double& distortion_max_2D, OT_HISTOGRAMME& histogramme_distortion_2D,
573     double& distortion_moyenne_3D, double& distortion_ecart_type_3D, double& distortion_min_3D, double& distortion_max_3D, OT_HISTOGRAMME& histogramme_distortion_3D,
574     double& volume,
575     double& fraction_volumique)
576 couturad 919 {
577 couturad 931 double volume_ves=0;
578 couturad 926 nb_element_2D=0;nb_element_3D=0;
579 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();
580     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();
581     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();
582     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();
583     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();
584     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();
585 couturad 926 volume=0;
586     fraction_volumique=0;
587    
588 couturad 931 LISTE_FEM_ELEMENT3::iterator it_element3;
589     for(FEM_ELEMENT3* ele3=fem->get_premier_element3(it_element3);ele3!=NULL;ele3=fem->get_suivant_element3(it_element3))
590     {
591     BOITE_3D b3d_ele = ele3->get_boite_3D();
592     if(boite_analyse!=NULL)
593     if(!boite_analyse->contient(b3d_ele.get_xcentre(),b3d_ele.get_ycentre(),b3d_ele.get_zcentre())) continue;
594     int nb_pt_gauss=ele3->get_nb_pt_gauss(ele3->get_degremax_fonction_interpolation());
595     for (int r=0;r<nb_pt_gauss;r++)
596     {
597     int degre=ele3->get_degre_gauss(nb_pt_gauss);
598     double w;
599     double uvw[3];
600     ele3->get_pt_gauss(degre,r,w,uvw);
601     double jac[9];
602 francois 1104 double det=ele3->get_jacobien(jac,uvw);
603 couturad 931 volume_ves+=w*det;
604     }
605     }
606 couturad 926 TPL_MAP_ENTITE<FEM_ELEMENT3*> tpl_map_element_maill_3D;
607     TPL_MAP_ENTITE<FEM_ELEMENT2*> tpl_map_element_maill_2D;
608     TPL_MAP_ENTITE<MG_CG_FORME*>::ITERATEUR it_forme;
609     for(MG_CG_FORME* forme=tpl_map_forme.get_premier(it_forme);forme!=NULL;forme=tpl_map_forme.get_suivant(it_forme))
610 couturad 919 {
611 couturad 926 if(forme->get_type_forme()==MG_CG_FORME::TYPE_FORME::VOLUME)
612 couturad 919 {
613 couturad 926 MG_CG_FORME_VOLUME* forme_volume = (MG_CG_FORME_VOLUME*)forme;
614     TPL_LISTE_ENTITE<FEM_ELEMENT_MAILLAGE*> *tmp_maill = forme_volume->get_mg_volume()->get_lien_fem_maillage();
615     long tmp_nb = tmp_maill->get_nb();
616     for(long i=0;i<tmp_nb;i++)
617 couturad 919 {
618 couturad 926 FEM_ELEMENT3* ele3 = (FEM_ELEMENT3*)tmp_maill->get(i);
619     BOITE_3D b3d_ele = ele3->get_boite_3D();
620     if(boite_analyse!=NULL)
621     if(!boite_analyse->contient(b3d_ele.get_xcentre(),b3d_ele.get_ycentre(),b3d_ele.get_zcentre())) continue;
622     tpl_map_element_maill_3D.ajouter(ele3);
623 couturad 919 }
624 couturad 926 TPL_MAP_ENTITE<MG_FACE*> tpl_map_face;
625     OT_GEOMETRIE::get_map_mg_face_sous_jacent(forme_volume->get_mg_volume(),tpl_map_face);
626     TPL_MAP_ENTITE<MG_FACE*>::ITERATEUR it_face;
627     for(MG_FACE* face=tpl_map_face.get_premier(it_face);face!=NULL;face=tpl_map_face.get_suivant(it_face))
628 couturad 919 {
629 couturad 926 tmp_maill = face->get_lien_fem_maillage();
630     tmp_nb = tmp_maill->get_nb();
631     for(long i=0;i<tmp_nb;i++)
632 couturad 919 {
633 couturad 926 FEM_ELEMENT2* ele2 = (FEM_ELEMENT2*)tmp_maill->get(i);
634     BOITE_3D b3d_ele = ele2->get_boite_3D();
635     if(boite_analyse!=NULL)
636     if(!boite_analyse->contient(b3d_ele.get_xcentre(),b3d_ele.get_ycentre(),b3d_ele.get_zcentre())) continue;
637     tpl_map_element_maill_2D.ajouter(ele2);
638 couturad 919 }
639     }
640     }
641 couturad 926 else if(forme->get_type_forme()==MG_CG_FORME::TYPE_FORME::MULTI_VOLUME)
642     {
643     MG_CG_FORME_MULTI_VOLUME* forme_multi_volume = (MG_CG_FORME_MULTI_VOLUME*)forme;
644     std::map<long,MG_VOLUME*>::iterator it_volume;
645     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))
646     {
647     TPL_LISTE_ENTITE<FEM_ELEMENT_MAILLAGE*> *tmp_maill = vol->get_lien_fem_maillage();
648     long tmp_nb = tmp_maill->get_nb();
649     for(long i=0;i<tmp_nb;i++)
650     {
651     FEM_ELEMENT3* ele3 = (FEM_ELEMENT3*)tmp_maill->get(i);
652     BOITE_3D b3d_ele = ele3->get_boite_3D();
653     if(boite_analyse!=NULL)
654     if(!boite_analyse->contient(b3d_ele.get_xcentre(),b3d_ele.get_ycentre(),b3d_ele.get_zcentre())) continue;
655     tpl_map_element_maill_3D.ajouter(ele3);
656     }
657     TPL_MAP_ENTITE<MG_FACE*> tpl_map_face;
658     OT_GEOMETRIE::get_map_mg_face_sous_jacent(vol,tpl_map_face);
659     TPL_MAP_ENTITE<MG_FACE*>::ITERATEUR it_face;
660     for(MG_FACE* face=tpl_map_face.get_premier(it_face);face!=NULL;face=tpl_map_face.get_suivant(it_face))
661     {
662     tmp_maill = face->get_lien_fem_maillage();
663     tmp_nb = tmp_maill->get_nb();
664     for(long i=0;i<tmp_nb;i++)
665     {
666     FEM_ELEMENT2* ele2 = (FEM_ELEMENT2*)tmp_maill->get(i);
667     BOITE_3D b3d_ele = ele2->get_boite_3D();
668     if(boite_analyse!=NULL)
669     if(!boite_analyse->contient(b3d_ele.get_xcentre(),b3d_ele.get_ycentre(),b3d_ele.get_zcentre())) continue;
670     tpl_map_element_maill_2D.ajouter(ele2);
671     }
672     }
673     }
674     }
675 couturad 919 }
676 couturad 926 nb_element_3D=tpl_map_element_maill_3D.get_nb();
677     nb_element_2D=tpl_map_element_maill_2D.get_nb();
678     std::vector<double> vector_jacobien_min_2D;
679     std::vector<double> vector_jacobien_max_2D;
680     std::vector<double> vector_jacobien_min_3D;
681     std::vector<double> vector_jacobien_max_3D;
682     std::vector<double> vector_distortion_2D;
683     std::vector<double> vector_distortion_3D;
684     FEM_MAILLAGE_QUADRATIQUE_OUTILS ot;
685     TPL_MAP_ENTITE<FEM_ELEMENT3*>::ITERATEUR it_ele3;
686     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))
687 couturad 919 {
688 couturad 926 int nb_pt_gauss=ele3->get_nb_pt_gauss(ele3->get_degremax_fonction_interpolation());
689     for (int r=0;r<nb_pt_gauss;r++)
690     {
691     int degre=ele3->get_degre_gauss(nb_pt_gauss);
692     double w;
693     double uvw[3];
694     ele3->get_pt_gauss(degre,r,w,uvw);
695     double jac[9];
696 francois 1104 double det=ele3->get_jacobien(jac,uvw);
697 couturad 926 volume+=w*det;
698     }
699     double jmin=ot.get_jmin(ele3);
700     double jmax=ot.get_jmin(ele3);
701     double distortion = ot.get_distorsion2(ele3);
702     vector_jacobien_min_3D.push_back(jmin);
703     vector_jacobien_max_3D.push_back(jmax);
704     vector_distortion_3D.push_back(distortion);
705     jacobien_min_moyenne_3D+=jmin;
706     jacobien_max_moyenne_3D+=jmax;
707     distortion_moyenne_3D+=distortion;
708 couturad 919 }
709 couturad 926 fraction_volumique=volume/volume_ves;
710     jacobien_min_moyenne_3D=jacobien_min_moyenne_3D/nb_element_3D;
711     jacobien_max_moyenne_3D=jacobien_max_moyenne_3D/nb_element_3D;
712     distortion_moyenne_3D=distortion_moyenne_3D/nb_element_3D;
713     std::vector<double>::iterator it_jac_min_3D=vector_jacobien_min_3D.begin();
714     std::vector<double>::iterator it_jac_max_3D=vector_jacobien_max_3D.begin();
715     std::vector<double>::iterator it_dist_3D=vector_distortion_3D.begin();
716     for(long i=0;i<nb_element_3D;i++)
717 couturad 919 {
718 couturad 926 double jmin=*it_jac_min_3D;
719     double jmax=*it_jac_max_3D;
720     double dist=*it_dist_3D;
721     if(jmin<jacobien_min_min_3D)jacobien_min_min_3D=jmin;
722     if(jmin>jacobien_min_max_3D)jacobien_min_max_3D=jmin;
723     if(jmax<jacobien_max_min_3D)jacobien_max_min_3D=jmax;
724     if(jmax>jacobien_max_max_3D)jacobien_max_max_3D=jmax;
725     if(dist<distortion_min_3D)distortion_min_3D=dist;
726     if(dist>distortion_max_3D)distortion_max_3D=dist;
727     jacobien_min_ecart_type_3D=(jmin-jacobien_min_moyenne_3D)*(jmin-jacobien_min_moyenne_3D);
728     jacobien_max_ecart_type_3D=(jmax-jacobien_max_moyenne_3D)*(jmax-jacobien_max_moyenne_3D);
729     distortion_ecart_type_3D=(dist-distortion_moyenne_3D)*(dist-distortion_moyenne_3D);
730     histogramme_jacobien_min_3D.ajouter_valeur(jmin,1.0/nb_element_3D);
731     histogramme_jacobien_max_3D.ajouter_valeur(jmax,1.0/nb_element_3D);
732     histogramme_distortion_3D.ajouter_valeur(dist,1.0/nb_element_3D);
733     it_jac_min_3D++;
734     it_jac_max_3D++;
735     it_dist_3D++;
736 couturad 919 }
737 couturad 926 jacobien_min_ecart_type_3D=sqrt(jacobien_min_ecart_type_3D*(1.0/(nb_element_3D-1.0)));
738     jacobien_max_ecart_type_3D=sqrt(jacobien_max_ecart_type_3D*(1.0/(nb_element_3D-1.0)));
739     distortion_ecart_type_3D=sqrt(distortion_ecart_type_3D*(1.0/(nb_element_3D-1.0)));
740    
741     TPL_MAP_ENTITE<FEM_ELEMENT2*>::ITERATEUR it_ele2;
742     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))
743 couturad 919 {
744 couturad 926 double jmin=ot.get_jmin(ele2);
745     double jmax=ot.get_jmin(ele2);
746     double distortion = ot.get_distorsion2(ele2);
747     vector_jacobien_min_2D.push_back(jmin);
748     vector_jacobien_max_2D.push_back(jmax);
749     vector_distortion_2D.push_back(distortion);
750     jacobien_min_moyenne_2D+=jmin;
751     jacobien_max_moyenne_2D+=jmax;
752     distortion_moyenne_2D+=distortion;
753 couturad 919 }
754 couturad 926 jacobien_min_moyenne_2D=jacobien_min_moyenne_2D/nb_element_2D;
755     jacobien_max_moyenne_2D=jacobien_max_moyenne_2D/nb_element_2D;
756     distortion_moyenne_2D=distortion_moyenne_2D/nb_element_2D;
757     std::vector<double>::iterator it_jac_min_2D=vector_jacobien_min_2D.begin();
758     std::vector<double>::iterator it_jac_max_2D=vector_jacobien_max_2D.begin();
759     std::vector<double>::iterator it_dist_2D=vector_distortion_2D.begin();
760     for(long i=0;i<nb_element_2D;i++)
761 couturad 919 {
762 couturad 926 double jmin=*it_jac_min_2D;
763     double jmax=*it_jac_max_2D;
764     double dist=*it_dist_2D;
765     if(jmin<jacobien_min_min_2D)jacobien_min_min_2D=jmin;
766     if(jmin>jacobien_min_max_2D)jacobien_min_max_2D=jmin;
767     if(jmax<jacobien_max_min_2D)jacobien_max_min_2D=jmax;
768     if(jmax>jacobien_max_max_2D)jacobien_max_max_2D=jmax;
769     if(dist<distortion_min_2D)distortion_min_2D=dist;
770     if(dist>distortion_max_2D)distortion_max_2D=dist;
771     jacobien_min_ecart_type_2D=(jmin-jacobien_min_moyenne_2D)*(jmin-jacobien_min_moyenne_2D);
772     jacobien_max_ecart_type_2D=(jmax-jacobien_max_moyenne_2D)*(jmax-jacobien_max_moyenne_2D);
773     distortion_ecart_type_2D=(dist-distortion_moyenne_2D)*(dist-distortion_moyenne_2D);
774     histogramme_jacobien_min_2D.ajouter_valeur(jmin,1.0/nb_element_2D);
775     histogramme_jacobien_max_2D.ajouter_valeur(jmax,1.0/nb_element_2D);
776     histogramme_distortion_2D.ajouter_valeur(dist,1.0/nb_element_2D);
777     it_jac_min_2D++;
778     it_jac_max_2D++;
779     it_dist_2D++;
780 couturad 919 }
781 couturad 926 jacobien_min_ecart_type_2D=sqrt(jacobien_min_ecart_type_2D*(1.0/(nb_element_2D-1.0)));
782     jacobien_max_ecart_type_2D=sqrt(jacobien_max_ecart_type_2D*(1.0/(nb_element_2D-1.0)));
783     distortion_ecart_type_2D=sqrt(distortion_ecart_type_2D*(1.0/(nb_element_2D-1.0)));
784 francois 1075 return 0;
785    
786 couturad 919 }
787    
788    
789 couturad 951 double MSTRUCT_OUTILS::get_volume_mgcg_forme(MG_CG_FORME* forme, FEM_MAILLAGE* fem,BOITE_3D* boite_analyse)
790     {
791     TPL_MAP_ENTITE<FEM_ELEMENT3*> tpl_map_element_maill_3D;
792     if(forme->get_type_forme()==MG_CG_FORME::TYPE_FORME::VOLUME)
793     {
794     MG_CG_FORME_VOLUME* forme_volume = (MG_CG_FORME_VOLUME*)forme;
795     TPL_LISTE_ENTITE<FEM_ELEMENT_MAILLAGE*> *tmp_maill = forme_volume->get_mg_volume()->get_lien_fem_maillage();
796     long tmp_nb = tmp_maill->get_nb();
797     for(long i=0;i<tmp_nb;i++)
798     {
799     FEM_ELEMENT3* ele3 = (FEM_ELEMENT3*)tmp_maill->get(i);
800     BOITE_3D b3d_ele = ele3->get_boite_3D();
801     if(boite_analyse!=NULL)
802     if(!boite_analyse->contient(b3d_ele.get_xcentre(),b3d_ele.get_ycentre(),b3d_ele.get_zcentre())) continue;
803     tpl_map_element_maill_3D.ajouter(ele3);
804     }
805     }
806     else if(forme->get_type_forme()==MG_CG_FORME::TYPE_FORME::MULTI_VOLUME)
807     {
808     MG_CG_FORME_MULTI_VOLUME* forme_multi_volume = (MG_CG_FORME_MULTI_VOLUME*)forme;
809     std::map<long,MG_VOLUME*>::iterator it_volume;
810     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))
811     {
812     TPL_LISTE_ENTITE<FEM_ELEMENT_MAILLAGE*> *tmp_maill = vol->get_lien_fem_maillage();
813     long tmp_nb = tmp_maill->get_nb();
814     for(long i=0;i<tmp_nb;i++)
815     {
816     FEM_ELEMENT3* ele3 = (FEM_ELEMENT3*)tmp_maill->get(i);
817     BOITE_3D b3d_ele = ele3->get_boite_3D();
818     if(boite_analyse!=NULL)
819     if(!boite_analyse->contient(b3d_ele.get_xcentre(),b3d_ele.get_ycentre(),b3d_ele.get_zcentre())) continue;
820     tpl_map_element_maill_3D.ajouter(ele3);
821     }
822     }
823     }
824     double volume=0;
825     TPL_MAP_ENTITE<FEM_ELEMENT3*>::ITERATEUR it_ele3;
826     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))
827     {
828     int nb_pt_gauss=ele3->get_nb_pt_gauss(ele3->get_degremax_fonction_interpolation());
829     for (int r=0;r<nb_pt_gauss;r++)
830     {
831     int degre=ele3->get_degre_gauss(nb_pt_gauss);
832     double w;
833     double uvw[3];
834     ele3->get_pt_gauss(degre,r,w,uvw);
835     double jac[9];
836 francois 1104 double det=ele3->get_jacobien(jac,uvw);
837 couturad 951 volume+=w*det;
838     }
839     }
840     return volume;
841     }
842 couturad 919
843 couturad 982 int MSTRUCT_OUTILS::appliquer_conditions_limites_plan(TPL_MAP_ENTITE< MG_FACE* >* plan, char* condition, double valeur,bool topo_sous_jacente)
844     {
845     TPL_MAP_ENTITE<MG_FACE*>::ITERATEUR it_face_plan;
846     for(MG_FACE *face = plan->get_premier(it_face_plan);face!=NULL;face=plan->get_suivant(it_face_plan))
847     {
848     face->ajouter_ccf(condition,valeur);
849     if(topo_sous_jacente==true)
850     {
851     TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*> map_topo;
852     face->get_topologie_sousjacente(&map_topo);
853     TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*>::ITERATEUR it_topo;
854     for(MG_ELEMENT_TOPOLOGIQUE *topo=map_topo.get_premier(it_topo);topo!=NULL;topo=map_topo.get_suivant(it_topo))
855     {
856     topo->ajouter_ccf(condition,valeur);
857     }
858     }
859     }
860 francois 1075 return 0;
861    
862 couturad 982 }
863 couturad 919
864 couturad 982 int MSTRUCT_OUTILS::appliquer_conditions_limites_plan(TPL_MAP_ENTITE< MG_FACE* >* plan, char* condition, std::string formule,std::vector<std::string> &listvariable,bool topo_sous_jacente)
865     {
866     TPL_MAP_ENTITE<MG_FACE*>::ITERATEUR it_face_plan;
867     for(MG_FACE *face = plan->get_premier(it_face_plan);face!=NULL;face=plan->get_suivant(it_face_plan))
868     {
869     face->ajouter_ccf(condition,formule,listvariable);
870     if(topo_sous_jacente==true)
871     {
872     TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*> map_topo;
873     face->get_topologie_sousjacente(&map_topo);
874     TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*>::ITERATEUR it_topo;
875     for(MG_ELEMENT_TOPOLOGIQUE *topo=map_topo.get_premier(it_topo);topo!=NULL;topo=map_topo.get_suivant(it_topo))
876     {
877     topo->ajouter_ccf(condition,formule,listvariable);
878     }
879     }
880     }
881 francois 1075 return 0;
882    
883 couturad 982 }
884 couturad 919
885 couturad 982 int MSTRUCT_OUTILS::appliquer_conditions_limites(MG_GEOMETRIE* m_mg_geometrie,BOITE_3D boite3D_ves,int Type_etude, int Type_CL, int Type_Chargement, double Valeur_CL, int Direction, double eps)
886     {
887     TPL_MAP_ENTITE<MG_FACE*> plan_xy_z0;
888     TPL_MAP_ENTITE<MG_FACE*> plan_xy_z1;
889     TPL_MAP_ENTITE<MG_FACE*> plan_yz_x0;
890     TPL_MAP_ENTITE<MG_FACE*> plan_yz_x1;
891     TPL_MAP_ENTITE<MG_FACE*> plan_xz_y0;
892     TPL_MAP_ENTITE<MG_FACE*> plan_xz_y1;
893     std::map<unsigned long,MG_FACE*,std::less<unsigned long>>::iterator it_face;
894     for(MG_FACE *face = m_mg_geometrie->get_premier_face(it_face);face!=NULL;face=m_mg_geometrie->get_suivant_face(it_face))
895     {
896     double xyzmin[3];
897     double xyzmax[3];
898 francois 1095 face->get_xyz_min_max(xyzmin,xyzmax);
899 couturad 982
900     if(OPERATEUR::egal(xyzmin[0],boite3D_ves.get_xmin(),eps) && OPERATEUR::egal(xyzmax[0],boite3D_ves.get_xmin(),eps)) plan_yz_x0.ajouter(face);
901     else if(OPERATEUR::egal(xyzmin[0],boite3D_ves.get_xmax(),eps) && OPERATEUR::egal(xyzmax[0],boite3D_ves.get_xmax(),eps)) plan_yz_x1.ajouter(face);
902     else if(OPERATEUR::egal(xyzmin[1],boite3D_ves.get_ymin(),eps) && OPERATEUR::egal(xyzmax[1],boite3D_ves.get_ymin(),eps)) plan_xz_y0.ajouter(face);
903     else if(OPERATEUR::egal(xyzmin[1],boite3D_ves.get_ymax(),eps) && OPERATEUR::egal(xyzmax[1],boite3D_ves.get_ymax(),eps)) plan_xz_y1.ajouter(face);
904     else if(OPERATEUR::egal(xyzmin[2],boite3D_ves.get_zmin(),eps) && OPERATEUR::egal(xyzmax[2],boite3D_ves.get_zmin(),eps)) plan_xy_z0.ajouter(face);
905     else if(OPERATEUR::egal(xyzmin[2],boite3D_ves.get_zmax(),eps) && OPERATEUR::egal(xyzmax[2],boite3D_ves.get_zmax(),eps)) plan_xy_z1.ajouter(face);
906     }
907     MG_SOMMET* sommet_origine;
908     MG_SOMMET* sommet_x1y0z0;
909     MG_SOMMET* sommet_x0y1z0;
910     MG_SOMMET* sommet_x0y0z1;
911     std::map<unsigned long,MG_SOMMET*,std::less<unsigned long>>::iterator it_sommet;
912     for(MG_SOMMET* som=m_mg_geometrie->get_premier_sommet(it_sommet);som!=NULL;som=m_mg_geometrie->get_suivant_sommet(it_sommet))
913     {
914     double xyz[3];
915     som->get_point()->evaluer(xyz);
916     if(OPERATEUR::egal(xyz[0],boite3D_ves.get_xmin(),eps) && OPERATEUR::egal(xyz[1],boite3D_ves.get_ymin(),eps) && OPERATEUR::egal(xyz[2],boite3D_ves.get_zmin(),eps)) sommet_origine=som;
917     else if(OPERATEUR::egal(xyz[0],boite3D_ves.get_xmax(),eps) && OPERATEUR::egal(xyz[1],boite3D_ves.get_ymin(),eps) && OPERATEUR::egal(xyz[2],boite3D_ves.get_zmin(),eps)) sommet_x1y0z0=som;
918     else if(OPERATEUR::egal(xyz[0],boite3D_ves.get_xmin(),eps) && OPERATEUR::egal(xyz[1],boite3D_ves.get_ymax(),eps) && OPERATEUR::egal(xyz[2],boite3D_ves.get_zmin(),eps)) sommet_x0y1z0=som;
919     else if(OPERATEUR::egal(xyz[0],boite3D_ves.get_xmin(),eps) && OPERATEUR::egal(xyz[1],boite3D_ves.get_ymin(),eps) && OPERATEUR::egal(xyz[2],boite3D_ves.get_zmax(),eps)) sommet_x0y0z1=som;
920     }
921     if(Type_etude==MSTRUCT::TYPE_ETUDE::MECANIQUE)
922     {
923     if(Type_Chargement==MSTRUCT::TYPE_CHARGEMENT::SPHERIQUE)
924     {
925     if(Type_CL==MSTRUCT::TYPE_CONDITIONS_LIMITES::DEFORMATION_HOMOGENE)
926     {
927 couturad 993 char chr_valeur_cl[1000];
928     sprintf(chr_valeur_cl,"%lf",Valeur_CL);
929     std::string str_valeur_cl = chr_valeur_cl;
930     std::string formule_Dx = str_valeur_cl+ "*X";
931     std::string formule_Dy = str_valeur_cl+ "*Y";
932     std::string formule_Dz = str_valeur_cl+ "*Z";
933     std::vector<std::string> liste_variable_formule_Dx;
934     std::vector<std::string> liste_variable_formule_Dy;
935     std::vector<std::string> liste_variable_formule_Dz;
936     liste_variable_formule_Dx.push_back((std::string)"X");
937     liste_variable_formule_Dy.push_back((std::string)"Y");
938     liste_variable_formule_Dz.push_back((std::string)"Z");
939     appliquer_conditions_limites_plan(&plan_xy_z0,(char*)"Dx",formule_Dx,liste_variable_formule_Dx,true);
940     appliquer_conditions_limites_plan(&plan_xy_z0,(char*)"Dy",formule_Dy,liste_variable_formule_Dy,true);
941     appliquer_conditions_limites_plan(&plan_xy_z0,(char*)"Dz",formule_Dz,liste_variable_formule_Dz,true);
942     appliquer_conditions_limites_plan(&plan_xy_z1,(char*)"Dx",formule_Dx,liste_variable_formule_Dx,true);
943     appliquer_conditions_limites_plan(&plan_xy_z1,(char*)"Dy",formule_Dy,liste_variable_formule_Dy,true);
944     appliquer_conditions_limites_plan(&plan_xy_z1,(char*)"Dz",formule_Dz,liste_variable_formule_Dz,true);
945     appliquer_conditions_limites_plan(&plan_yz_x0,(char*)"Dx",formule_Dx,liste_variable_formule_Dx,true);
946     appliquer_conditions_limites_plan(&plan_yz_x0,(char*)"Dy",formule_Dy,liste_variable_formule_Dy,true);
947     appliquer_conditions_limites_plan(&plan_yz_x0,(char*)"Dz",formule_Dz,liste_variable_formule_Dz,true);
948     appliquer_conditions_limites_plan(&plan_yz_x1,(char*)"Dx",formule_Dx,liste_variable_formule_Dx,true);
949     appliquer_conditions_limites_plan(&plan_yz_x1,(char*)"Dy",formule_Dy,liste_variable_formule_Dy,true);
950     appliquer_conditions_limites_plan(&plan_yz_x1,(char*)"Dz",formule_Dz,liste_variable_formule_Dz,true);
951     appliquer_conditions_limites_plan(&plan_xz_y0,(char*)"Dx",formule_Dx,liste_variable_formule_Dx,true);
952     appliquer_conditions_limites_plan(&plan_xz_y0,(char*)"Dy",formule_Dy,liste_variable_formule_Dy,true);
953     appliquer_conditions_limites_plan(&plan_xz_y0,(char*)"Dz",formule_Dz,liste_variable_formule_Dz,true);
954     appliquer_conditions_limites_plan(&plan_xz_y1,(char*)"Dx",formule_Dx,liste_variable_formule_Dx,true);
955     appliquer_conditions_limites_plan(&plan_xz_y1,(char*)"Dy",formule_Dy,liste_variable_formule_Dy,true);
956     appliquer_conditions_limites_plan(&plan_xz_y1,(char*)"Dz",formule_Dz,liste_variable_formule_Dz,true);
957    
958    
959    
960    
961    
962    
963    
964    
965    
966 couturad 982 }
967     else if(Type_CL==MSTRUCT::TYPE_CONDITIONS_LIMITES::CONTRAINTE_HOMOGENE)
968     {
969 couturad 993 sommet_origine->ajouter_ccf((char*)"Dt",0.0);
970     sommet_x1y0z0->ajouter_ccf((char*)"Dy",0.0);
971     sommet_x1y0z0->ajouter_ccf((char*)"Dz",0.0);
972     sommet_x0y1z0->ajouter_ccf((char*)"Dz",0.0);
973     appliquer_conditions_limites_plan(&plan_xy_z0,(char*)"Pz",-Valeur_CL,false);
974     appliquer_conditions_limites_plan(&plan_xy_z1,(char*)"Pz",Valeur_CL,false);
975     appliquer_conditions_limites_plan(&plan_yz_x0,(char*)"Px",-Valeur_CL,false);
976     appliquer_conditions_limites_plan(&plan_yz_x1,(char*)"Px",Valeur_CL,false);
977     appliquer_conditions_limites_plan(&plan_xz_y0,(char*)"Py",-Valeur_CL,false);
978     appliquer_conditions_limites_plan(&plan_xz_y1,(char*)"Py",Valeur_CL,false);
979    
980    
981    
982    
983    
984    
985    
986 couturad 982 }
987     }
988     else if(Type_Chargement==MSTRUCT::TYPE_CHARGEMENT::DEVIATORIQUE)
989     {
990     if(Type_CL==MSTRUCT::TYPE_CONDITIONS_LIMITES::DEFORMATION_HOMOGENE)
991     {
992     char chr_valeur_cl[1000];
993     sprintf(chr_valeur_cl,"%lf",Valeur_CL);
994     std::string str_valeur_cl = chr_valeur_cl;
995 couturad 993 std::string formule_Dx = str_valeur_cl+ "*(Y+Z)";
996     std::string formule_Dy = str_valeur_cl+ "*(X+Z)";
997     std::string formule_Dz = str_valeur_cl+ "*(X+Y)";
998 couturad 982 std::vector<std::string> liste_variable_formule_Dx;
999     std::vector<std::string> liste_variable_formule_Dy;
1000     std::vector<std::string> liste_variable_formule_Dz;
1001     liste_variable_formule_Dx.push_back((std::string)"Y");
1002 couturad 993 liste_variable_formule_Dx.push_back((std::string)"Z");
1003     liste_variable_formule_Dy.push_back((std::string)"X");
1004 couturad 982 liste_variable_formule_Dy.push_back((std::string)"Z");
1005     liste_variable_formule_Dz.push_back((std::string)"X");
1006 couturad 993 liste_variable_formule_Dz.push_back((std::string)"Y");
1007 couturad 982 appliquer_conditions_limites_plan(&plan_xy_z0,(char*)"Dx",formule_Dx,liste_variable_formule_Dx,true);
1008     appliquer_conditions_limites_plan(&plan_xy_z0,(char*)"Dy",formule_Dy,liste_variable_formule_Dy,true);
1009     appliquer_conditions_limites_plan(&plan_xy_z0,(char*)"Dz",formule_Dz,liste_variable_formule_Dz,true);
1010     appliquer_conditions_limites_plan(&plan_xy_z1,(char*)"Dx",formule_Dx,liste_variable_formule_Dx,true);
1011     appliquer_conditions_limites_plan(&plan_xy_z1,(char*)"Dy",formule_Dy,liste_variable_formule_Dy,true);
1012     appliquer_conditions_limites_plan(&plan_xy_z1,(char*)"Dz",formule_Dz,liste_variable_formule_Dz,true);
1013     appliquer_conditions_limites_plan(&plan_yz_x0,(char*)"Dx",formule_Dx,liste_variable_formule_Dx,true);
1014     appliquer_conditions_limites_plan(&plan_yz_x0,(char*)"Dy",formule_Dy,liste_variable_formule_Dy,true);
1015     appliquer_conditions_limites_plan(&plan_yz_x0,(char*)"Dz",formule_Dz,liste_variable_formule_Dz,true);
1016     appliquer_conditions_limites_plan(&plan_yz_x1,(char*)"Dx",formule_Dx,liste_variable_formule_Dx,true);
1017     appliquer_conditions_limites_plan(&plan_yz_x1,(char*)"Dy",formule_Dy,liste_variable_formule_Dy,true);
1018     appliquer_conditions_limites_plan(&plan_yz_x1,(char*)"Dz",formule_Dz,liste_variable_formule_Dz,true);
1019     appliquer_conditions_limites_plan(&plan_xz_y0,(char*)"Dx",formule_Dx,liste_variable_formule_Dx,true);
1020     appliquer_conditions_limites_plan(&plan_xz_y0,(char*)"Dy",formule_Dy,liste_variable_formule_Dy,true);
1021     appliquer_conditions_limites_plan(&plan_xz_y0,(char*)"Dz",formule_Dz,liste_variable_formule_Dz,true);
1022     appliquer_conditions_limites_plan(&plan_xz_y1,(char*)"Dx",formule_Dx,liste_variable_formule_Dx,true);
1023     appliquer_conditions_limites_plan(&plan_xz_y1,(char*)"Dy",formule_Dy,liste_variable_formule_Dy,true);
1024     appliquer_conditions_limites_plan(&plan_xz_y1,(char*)"Dz",formule_Dz,liste_variable_formule_Dz,true);
1025 couturad 993
1026    
1027    
1028    
1029    
1030    
1031    
1032    
1033    
1034    
1035    
1036    
1037 couturad 982 }
1038     else if(Type_CL==MSTRUCT::TYPE_CONDITIONS_LIMITES::CONTRAINTE_HOMOGENE)
1039     {
1040     sommet_origine->ajouter_ccf((char*)"Dt",0.0);
1041     sommet_x1y0z0->ajouter_ccf((char*)"Dy",0.0);
1042     sommet_x1y0z0->ajouter_ccf((char*)"Dz",0.0);
1043     sommet_x0y1z0->ajouter_ccf((char*)"Dz",0.0);
1044     appliquer_conditions_limites_plan(&plan_xy_z0,(char*)"Px",-Valeur_CL,false);
1045     appliquer_conditions_limites_plan(&plan_xy_z0,(char*)"Py",-Valeur_CL,false);
1046 couturad 993 appliquer_conditions_limites_plan(&plan_xy_z0,(char*)"Pz",0.0,false);
1047 couturad 982 appliquer_conditions_limites_plan(&plan_xy_z1,(char*)"Px",Valeur_CL,false);
1048 couturad 993 appliquer_conditions_limites_plan(&plan_xy_z1,(char*)"Py",Valeur_CL,false);
1049     appliquer_conditions_limites_plan(&plan_xy_z1,(char*)"Pz",0.0,false);
1050 couturad 982 appliquer_conditions_limites_plan(&plan_xz_y0,(char*)"Px",-Valeur_CL,false);
1051 couturad 993 appliquer_conditions_limites_plan(&plan_xz_y0,(char*)"Py",0.0,false);
1052 couturad 982 appliquer_conditions_limites_plan(&plan_xz_y0,(char*)"Pz",-Valeur_CL,false);
1053     appliquer_conditions_limites_plan(&plan_xz_y1,(char*)"Px",Valeur_CL,false);
1054 couturad 993 appliquer_conditions_limites_plan(&plan_xz_y1,(char*)"Py",0.0,false);
1055     appliquer_conditions_limites_plan(&plan_xz_y1,(char*)"Pz",Valeur_CL,false);
1056     appliquer_conditions_limites_plan(&plan_yz_x0,(char*)"Px",0.0,false);
1057 couturad 982 appliquer_conditions_limites_plan(&plan_yz_x0,(char*)"Py",-Valeur_CL,false);
1058     appliquer_conditions_limites_plan(&plan_yz_x0,(char*)"Pz",-Valeur_CL,false);
1059 couturad 993 appliquer_conditions_limites_plan(&plan_yz_x1,(char*)"Px",0.0,false);
1060 couturad 982 appliquer_conditions_limites_plan(&plan_yz_x1,(char*)"Py",Valeur_CL,false);
1061     appliquer_conditions_limites_plan(&plan_yz_x1,(char*)"Pz",Valeur_CL,false);
1062     }
1063     }
1064     }
1065     else if(Type_etude==MSTRUCT::TYPE_ETUDE::THERMIQUE)
1066     {
1067     if(Type_CL==MSTRUCT::TYPE_CONDITIONS_LIMITES::GRADIENT_TEMPERATURE)
1068     {
1069     if(Direction==0)
1070     {
1071     appliquer_conditions_limites_plan(&plan_yz_x0,(char*)"Tn",0.0,false);
1072     appliquer_conditions_limites_plan(&plan_yz_x1,(char*)"Tn",Valeur_CL,false);
1073     appliquer_conditions_limites_plan(&plan_xy_z0,(char*)"fn",0.0,false);
1074     appliquer_conditions_limites_plan(&plan_xy_z1,(char*)"fn",0.0,false);
1075     appliquer_conditions_limites_plan(&plan_xz_y0,(char*)"fn",0.0,false);
1076     appliquer_conditions_limites_plan(&plan_xz_y1,(char*)"fn",0.0,false);
1077     }
1078     else if(Direction==1)
1079     {
1080     appliquer_conditions_limites_plan(&plan_yz_x0,(char*)"fn",0.0,false);
1081     appliquer_conditions_limites_plan(&plan_yz_x1,(char*)"fn",0.0,false);
1082     appliquer_conditions_limites_plan(&plan_xy_z0,(char*)"fn",0.0,false);
1083     appliquer_conditions_limites_plan(&plan_xy_z1,(char*)"fn",0.0,false);
1084     appliquer_conditions_limites_plan(&plan_xz_y0,(char*)"Tn",0.0,false);
1085     appliquer_conditions_limites_plan(&plan_xz_y1,(char*)"Tn",Valeur_CL,false);
1086     }
1087     else if(Direction==2)
1088     {
1089     appliquer_conditions_limites_plan(&plan_yz_x0,(char*)"fn",0.0,false);
1090     appliquer_conditions_limites_plan(&plan_yz_x1,(char*)"fn",0.0,false);
1091     appliquer_conditions_limites_plan(&plan_xy_z0,(char*)"Tn",0.0,false);
1092     appliquer_conditions_limites_plan(&plan_xy_z1,(char*)"Tn",Valeur_CL,false);
1093     appliquer_conditions_limites_plan(&plan_xz_y0,(char*)"fn",0.0,false);
1094     appliquer_conditions_limites_plan(&plan_xz_y1,(char*)"fn",0.0,false);
1095     }
1096     }
1097     else if(Type_CL==MSTRUCT::TYPE_CONDITIONS_LIMITES::FLUX_CHALEUR)
1098     {
1099     if(Direction==0)
1100     {
1101     sommet_origine->ajouter_ccf((char*)"Tn",0.0);
1102     appliquer_conditions_limites_plan(&plan_yz_x0,(char*)"fn",Valeur_CL,false);
1103     appliquer_conditions_limites_plan(&plan_yz_x1,(char*)"fn",-Valeur_CL,false);
1104     appliquer_conditions_limites_plan(&plan_xy_z0,(char*)"fn",0.0,false);
1105     appliquer_conditions_limites_plan(&plan_xy_z1,(char*)"fn",0.0,false);
1106     appliquer_conditions_limites_plan(&plan_xz_y0,(char*)"fn",0.0,false);
1107     appliquer_conditions_limites_plan(&plan_xz_y1,(char*)"fn",0.0,false);
1108     }
1109     else if(Direction==1)
1110     {
1111     sommet_origine->ajouter_ccf((char*)"Tn",0.0);
1112     appliquer_conditions_limites_plan(&plan_yz_x0,(char*)"fn",0.0,false);
1113     appliquer_conditions_limites_plan(&plan_yz_x1,(char*)"fn",0.0,false);
1114     appliquer_conditions_limites_plan(&plan_xy_z0,(char*)"fn",0.0,false);
1115     appliquer_conditions_limites_plan(&plan_xy_z1,(char*)"fn",0.0,false);
1116     appliquer_conditions_limites_plan(&plan_xz_y0,(char*)"fn",Valeur_CL,false);
1117     appliquer_conditions_limites_plan(&plan_xz_y1,(char*)"fn",-Valeur_CL,false);
1118     }
1119     else if(Direction==2)
1120     {
1121     sommet_origine->ajouter_ccf((char*)"Tn",0.0);
1122     appliquer_conditions_limites_plan(&plan_yz_x0,(char*)"fn",0.0,false);
1123     appliquer_conditions_limites_plan(&plan_yz_x1,(char*)"fn",0.0,false);
1124     appliquer_conditions_limites_plan(&plan_xy_z0,(char*)"fn",Valeur_CL,false);
1125     appliquer_conditions_limites_plan(&plan_xy_z1,(char*)"fn",-Valeur_CL,false);
1126     appliquer_conditions_limites_plan(&plan_xz_y0,(char*)"fn",0.0,false);
1127     appliquer_conditions_limites_plan(&plan_xz_y1,(char*)"fn",0.0,false);
1128     }
1129     }
1130     }
1131 francois 1075 return 0;
1132    
1133 couturad 982 }
1134 couturad 919
1135    
1136    
1137    
1138    
1139 couturad 982
1140