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