ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/microstructure/src/mstruct_outils.cpp
Revision: 1075
Committed: Tue Aug 10 17:02:54 2021 UTC (4 years ago) by francois
File size: 55178 byte(s)
Log Message:
suppression de warning avec le dernier compilateur

File Contents

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