ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/microstructure/src/mstruct_outils.cpp
Revision: 1140
Committed: Tue Mar 26 14:45:03 2024 UTC (13 months, 3 weeks ago) by francois
File size: 55206 byte(s)
Log Message:
L'ensemble des post traitements sont maintenant valides avec la méthode de découpage

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