MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
mg_export.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 //####// mg_export.cpp
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 11:58:53 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
22 
23 #include "gestionversion.h"
24 #include "mc_gestionnaire.h"
25 #include "mc_propriete.h"
26 #include "mc_materiau.h"
27 #include "mg_export.h"
28 #include "mg_maillage.h"
29 #include "mg_coque_element.h"
30 #include "mg_poutre_element.h"
31 #include "mg_volume_element.h"
32 #include "mg_gestionnaire.h"
33 #include "mg_sommet_noeud.h"
34 #include "mg_arete_element.h"
35 #include "mg_face_element.h"
36 #include "mg_poutre.h"
37 #include "mg_element_topologique.h"
38 #include "ot_boite_3d.h"
39 #include "ot_quadrature_gauss.h"
40 #include "constantegeo.h"
43 #include <fstream>
44 #include <map>
45 #include <stdio.h>
46 #include <string.h>
47 #include <math.h>
48 #include <ot_chaine.h>
49 #include <unistd.h>
50 #ifdef __WIN32__
51 #include <dir.h>
52 #endif
53 
55 {
56 param_aster.ajouter("Version",MAGIC_ASTER_VERSION_DEFAUT,OT_PARAMETRES::STRING,"Proprietes aster : Version de Code Aster a utiliser pour le calcul");
57 param_aster.ajouter("Memoire",128.,OT_PARAMETRES::DOUBLE,"Proprietes aster : Memoire maximale disponible pour le calcul en MWord. Word : taille d'un entier 4 octets en 32 bits et 8 octets en 64 bits");
58 param_aster.ajouter("Temps_max",7200.,OT_PARAMETRES::DOUBLE,"Proprietes aster : Temps maximal en s avant que le calcul ne se killed");
59 param_aster.ajouter("Max_base",48.,OT_PARAMETRES::DOUBLE,"Proprietes aster : taille du fichier temporaire pour la base de donnée ASTER en Gb");
60 param_aster.ajouter("Nb_CPU",1.,OT_PARAMETRES::DOUBLE,"Proprietes aster : Nombre de cpu que le processus peut utiliser");
61 param_aster.ajouter("Noeud_ele",0,OT_PARAMETRES::DOUBLE,"Proprietes elasticite : 0 Calcul des tenseurs aux noeud 1 calcul des tenseurs aux noeuds par element 2. calcul des tenseurs aux point de gauss");
62 param_aster.ajouter("Tref",273,OT_PARAMETRES::DOUBLE,"Proprietes thermique : température de reference");
63 param_aster.ajouter("Ti",0,OT_PARAMETRES::DOUBLE,"Proprietes thermique et statique non lineaire : temps initial");
64 param_aster.ajouter("Tf",100,OT_PARAMETRES::DOUBLE,"Proprietes thermique et statique non lineaire : temps final");
65 param_aster.ajouter("DIV",2,OT_PARAMETRES::DOUBLE,"Proprietes thermique à coefficients variables: Réduction du nombre de pas de resultats a imprimer");
66 param_aster.ajouter("Pas",1,OT_PARAMETRES::DOUBLE,"Proprietes thermique et statique non lineaire : Nombre de pas de temps");
67 param_aster.ajouter("Pasvariable",1,OT_PARAMETRES::DOUBLE,"Proprietes thermique et statique non lineaire : Nombre de pas variable");
68 param_aster.ajouter("division_pas",1,OT_PARAMETRES::DOUBLE,"Proprietes thermique et statique non lineaire : Nombre de pas entre les pas numeriques variables");
69 param_aster.ajouter("Euler",1,OT_PARAMETRES::DOUBLE,"Proprietes thermique : parametres d'Euler");
70 param_aster.ajouter("Eps",1e-6,OT_PARAMETRES::DOUBLE,"Proprietes thermique : parametre de precision");
71 param_aster.ajouter("Incr_mat_tan_pred",1,OT_PARAMETRES::DOUBLE,"Proprietes statique non lineaire : La matrice tangente de prediction est reevaluee a tous les «Incr_mat_tan_pred» increment d'instant");
72 param_aster.ajouter("It_mat_tan_coh",0,OT_PARAMETRES::DOUBLE,"Proprietes statique non lineaire : La matrice tangente coherente est reevaluee a tous les «It_mat_tan_coh» iterarions de newton");
73 param_aster.ajouter("It_resultat",0,OT_PARAMETRES::DOUBLE,"Proprietes statique non lineaire : Enregistre un nombre donné d'instant de calcul, excluant le dernier instant qui est enregistre par defaut");
74 param_aster.ajouter("n1",1.0,OT_PARAMETRES::DOUBLE,"Proprietes thermique non lineaire : methode de NEWTON");
75 param_aster.ajouter("n2",1e-3,OT_PARAMETRES::DOUBLE,"Proprietes thermique non lineaire : methode de NEWTON");
76 param_aster.ajouter("n3",1.0,OT_PARAMETRES::DOUBLE,"Proprietes thermique non lineaire : methode de NEWTON");
77 param_aster.ajouter("conv1",1e-3,OT_PARAMETRES::DOUBLE,"Proprietes thermique non lineaire : convergence de la methode de NEWTON");
78 param_aster.ajouter("conv2",100.0,OT_PARAMETRES::DOUBLE,"Proprietes thermique non lineaire : convergence de la methode de NEWTON");
79 param_aster.ajouter("nonlineaire",0,OT_PARAMETRES::DOUBLE,"Proprietes thermique : type de l'etude (lineaire ou non lineaire)");
80 param_aster.ajouter("Pas_decharge",0,OT_PARAMETRES::DOUBLE,"Proprietes statique non lineaire : Nombre de pas pour le calcul de la decharge 0 pas de decharge");
81 param_aster.ajouter("Pas_palier",0,OT_PARAMETRES::DOUBLE,"Proprietes statique non lineaire : Nombre de pas pour le palier dans le calcul de la decharge");
82 param_aster.ajouter("Niv_subd",0,OT_PARAMETRES::DOUBLE,"Proprietes statique non lineaire : Nombre de niveau de subdivision maximale pour adapter le newton");
83 param_aster.ajouter("Pas_subd",0,OT_PARAMETRES::DOUBLE,"Proprietes statique non lineaire : Nombre de subdivision pour adapter le newton");
84 param_aster.ajouter("Infini",1e+15,OT_PARAMETRES::DOUBLE,"Proprietes calcul mixte volume poutre : Valeur par défaut pour la rigidite des mini-poutre");
85 param_aster.ajouter("Base_num_mail",10,OT_PARAMETRES::DOUBLE,"Choix de la base pour décrire les numero dans le fichier mail de code aster (entre 10 et 36)");
86 param_aster.ajouter("Solveur_Methode",1,OT_PARAMETRES::DOUBLE,"Choix du solveur : 1. MULT_FRONT 2. LDLT 3. MUMPS 4. GCPC");
87 param_aster.ajouter("Solveur_Renum_MULT_FRONT",1,OT_PARAMETRES::DOUBLE,"Choix du renumeroteur pour MULT_FRONT : 1. METIS 2. MD 3. MDA");
88 param_aster.ajouter("Solveur_Renum_LDLT",1,OT_PARAMETRES::DOUBLE,"Choix du renumeroteur pour LDLT : 1. RCMK 2. SANS");
89 param_aster.ajouter("Solveur_Renum_MUMPS",1,OT_PARAMETRES::DOUBLE,"Choix du renumeroteur pour MUMPS : 1. AUTO 2. AMD 3. AMF 4. QAMD 5. PORD 6. METIS 7. SCOTCH");
90 param_aster.ajouter("Solveur_Gestion_memoire_MUMPS",1,OT_PARAMETRES::DOUBLE,"Choix de la gestion memeoire pour MUMPS : 1. AUTO 2. IN_CORE 3. OUT_CORE 4. EVAL");
91 param_aster.ajouter("Solveur_Pre_Cond_GCPC",1,OT_PARAMETRES::DOUBLE,"Choix du preconditionneur pour GCPC : 1. LDLT_INC sans RENUM 2. LDLT_INC avec RENUM RCMK 3. LDLT_SP");
92 param_aster.ajouter("nbrniveau",10.,OT_PARAMETRES::DOUBLE,"Nombre de matériaux utilisés");
93 }
94 
95 
97 {
98 }
99 
100 void MG_EXPORT::lire_params_aster(char *fichier)
101 {
102 param_aster.lire(fichier);
103 }
104 
105 void MG_EXPORT::change_param_aster(char *nomparam,double val)
106 {
107 param_aster.change_valeur(nomparam, val);
108 }
109 
110 void MG_EXPORT::change_param_aster(char *nomparam,char* val)
111 {
112 param_aster.change_valeur(nomparam, val);
113 }
114 
116 {
117 param_aster.enregistrer(fichier);
118 }
119 
120 
122  {
123  int base=(int)param_aster.get_valeur("Base_num_mail");
124  return base;
125 
126  }
127 
129 {
130  return &param_aster;
131 }
132 
133 
134 
136 {
137  static std::map<long,int,std::less<long > > tab;
138  static int num=1;
139  if (ele==NULL) return 0;
140 
141  int nbccf=ele->get_nb_ccf();
142  for (int k=0;k<nbccf;k++)
143  {
144  char typeccf[10];
145  ele->get_type_ccf(k,typeccf);
146  if (typeccf[0]=='C')
147  if (typeccf[1]=='c')
148  {
149  long couleur=0;
150  double val=ele->get_valeur_ccf(k);
151  unsigned char *p=(unsigned char*)&val;
152  couleur=couleur+(*p);
153  p++;
154  couleur=couleur+((*p)<<8);
155  p++;
156  couleur=couleur+((*p)<<16);
157  std::map<long,int,std::less<long > >::iterator it=tab.find(couleur);
158  if (it==tab.end())
159  {
160  std::pair<long,int> tmp(couleur,num);
161  tab.insert(tmp);
162  num++;
163  return num;
164  }
165  int valeur=(*it).second+1+((*it).second+1)/20;
166  return valeur;
167  }
168  }
169  return 0;
170 }
171 
173 {
174  f << "$ElementData" << std::endl;
175  f <<"1"<<std::endl;
176  f<<"\"Partition\""<<std::endl;
177  f<<"1"<<std::endl;
178  f<<"0.0"<<std::endl;
179  f<<"3"<<std::endl;
180  f<<"0"<<std::endl;
181  f<< "1" <<std::endl;
182  int nbele=lstsegment.get_nb()+lsttriangle.get_nb()+lstquadrangle.get_nb()+lsttetra.get_nb()+lsthexa.get_nb()+lstpenta.get_nb()+lstpyramide.get_nb();
183  f << nbele << std::endl;
185  for (MG_SEGMENT* segment=lstsegment.get_premier(itsegment);segment;segment=lstsegment.get_suivant(itsegment))
186  {
187  f << segment->get_nouveau_numero()<< " ";
188  unsigned long numpart=(unsigned long)(0.1*(segment->get_origine()-1000)+1);
189  f << numpart << std::endl;
190  }
192  for (MG_TRIANGLE* tri=lsttriangle.get_premier(ittri);tri;tri=lsttriangle.get_suivant(ittri))
193  {
194  f << tri->get_nouveau_numero()<< " ";
195  unsigned long numpart=(unsigned long)(0.1*(tri->get_origine()-1000)+1);
196  f << numpart << std::endl;
197  }
199  for (MG_QUADRANGLE* quad=lstquadrangle.get_premier(itquad);quad;quad=lstquadrangle.get_suivant(itquad))
200  {
201  f << quad->get_nouveau_numero()<< " ";
202  unsigned long numpart=(unsigned long)(0.1*(quad->get_origine()-1000)+1);
203  f << numpart << std::endl;
204  }
206  for (MG_TETRA* tet=lsttetra.get_premier(ittet);tet;tet=lsttetra.get_suivant(ittet))
207  {
208  f << tet->get_nouveau_numero()<< " ";
209  unsigned long numpart=(unsigned long)(0.1*(tet->get_origine()-1000)+1);
210  f << numpart << std::endl;
211  }
213  for (MG_HEXA* hex=lsthexa.get_premier(ithex);hex;hex=lsthexa.get_suivant(ithex))
214  {
215  f << hex->get_nouveau_numero()<< " ";
216  unsigned long numpart=(unsigned long)(0.1*(hex->get_origine()-1000)+1);
217  f << numpart << std::endl;
218  }
220  for (MG_PENTA* pen=lstpenta.get_premier(itpen);pen;pen=lstpenta.get_suivant(itpen))
221  {
222  f << pen->get_nouveau_numero() << " ";
223  unsigned long numpart=(unsigned long)(0.1*(pen->get_origine()-1000)+1);
224  f << numpart << std::endl;
225  }
227  for (MG_PYRAMIDE* pyr=lstpyramide.get_premier(itpyr);pyr;pyr=lstpyramide.get_suivant(itpyr))
228  {
229  f << pyr->get_nouveau_numero() << " ";
230  unsigned long numpart=(unsigned long)(0.1*(pyr->get_origine()-1000)+1);
231  f << numpart << std::endl;
232  }
233  f << "$EndElementData" << std::endl;
234 
235 }
236 
237 void MG_EXPORT::gmsh41entities(std::ofstream &f,MG_GEOMETRIE *geo)
238 {
239 f << "$Entities"<< std::endl;
240  f << geo->get_nb_mg_sommet() << " "<< geo->get_nb_mg_arete() << " " << geo->get_nb_mg_face() << " " << geo->get_nb_mg_volume() << " " <<std::endl;
241  LISTE_MG_SOMMET::iterator its;
242  for (MG_SOMMET* som=geo->get_premier_sommet(its);som!=NULL;som=geo->get_suivant_sommet(its))
243  {
244  double xyz[3];
245  if (!som->est_une_topo_element())
246  som->get_point()->evaluer(xyz);
247  else
248  {
249  MG_SOMMET_NOEUD* somno=(MG_SOMMET_NOEUD*)som;
250  xyz[0]=somno->get_mg_noeud()->get_x();
251  xyz[1]=somno->get_mg_noeud()->get_y();
252  xyz[2]=somno->get_mg_noeud()->get_z();
253  }
254  f<< som->get_id() << " " << xyz[0] << " " << xyz[1] << " " << xyz[2] << " 0" << std::endl;
255  }
256  LISTE_MG_ARETE::iterator ita;
257  for (MG_ARETE* are=geo->get_premier_arete(ita);are!=NULL;are=geo->get_suivant_arete(ita))
258  {
259  BOITE_3D b;
260  if (!are->est_une_topo_element())
261  {
262  double xyz1[3],xyz2[3];
263  are->get_cosommet1()->get_sommet()->get_point()->evaluer(xyz1);
264  are->get_cosommet2()->get_sommet()->get_point()->evaluer(xyz2);
265  BOITE_3D b1(xyz1[0],xyz1[1],xyz1[2],xyz1[0],xyz1[1],xyz1[2]);
266  BOITE_3D b2(xyz2[0],xyz2[1],xyz2[2],xyz2[0],xyz2[1],xyz2[2]);
267  b=b1+b2;
268  }
269  else
270  {
271  MG_ARETE_ELEMENT* areele=(MG_ARETE_ELEMENT*) are;
272  for (int i=0;i<areele->get_nb_element();i++)
273  {
274  MG_NOEUD* no=((MG_SEGMENT*)(areele->get_element(i)))->get_noeud1();
275  double *xyz=no->get_coord();
276  BOITE_3D b1(xyz[0],xyz[1],xyz[2],xyz[0],xyz[1],xyz[2]);
277  if (i==0) b=b1; else b=b+b1;
278  no=((MG_SEGMENT*)(areele->get_element(i)))->get_noeud2();
279  xyz=no->get_coord();
280  b1.reinit(xyz[0],xyz[1],xyz[2],xyz[0],xyz[1],xyz[2]);
281  b=b+b1;
282  }
283  }
284  f<< are->get_id() << " " << b.get_xmin() << " " << b.get_ymin() << " " << b.get_zmin() << " " << b.get_xmax() << " " << b.get_ymax() << " " << b.get_zmax() << " 0" << std::endl;
285  }
286  LISTE_MG_FACE::iterator itf;
287  for (MG_FACE* fac=geo->get_premier_face(itf);fac!=NULL;fac=geo->get_suivant_face(itf))
288  {
289  BOITE_3D b;
290  if (!fac->est_une_topo_element())
291  {
293  fac->get_topologie_sousjacente(&lst);
295  bool ini=false;
296  for (MG_ELEMENT_TOPOLOGIQUE* ele=lst.get_premier(it);ele!=NULL;ele=lst.get_suivant(it))
297  if (ele->get_type()==MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::SOMMET)
298  {
299  MG_SOMMET* som=(MG_SOMMET*)ele;
300  double xyz[3];
301  som->get_point()->evaluer(xyz);
302  BOITE_3D b1(xyz[0],xyz[1],xyz[2],xyz[0],xyz[1],xyz[2]);
303  if (ini==false) {ini=true;b=b1;} else b=b+b1;
304  }
305  }
306  else
307  {
308  MG_FACE_ELEMENT* faceele=(MG_FACE_ELEMENT*) fac;
309  for (int i=0;i<faceele->get_nb_element();i++)
310  {
311  MG_ELEMENT_MAILLAGE* ele=faceele->get_element(i);
313  {
314  MG_TRIANGLE* tri=(MG_TRIANGLE*)ele;
315  MG_NOEUD* no=tri->get_noeud1();
316  double *xyz=no->get_coord();
317  BOITE_3D b1(xyz[0],xyz[1],xyz[2],xyz[0],xyz[1],xyz[2]);
318  if (i==0) b=b1; else b=b+b1;
319  no=tri->get_noeud2();
320  xyz=no->get_coord();
321  b1.reinit(xyz[0],xyz[1],xyz[2],xyz[0],xyz[1],xyz[2]);
322  b+b1;
323  no=tri->get_noeud3();
324  xyz=no->get_coord();
325  b1.reinit(xyz[0],xyz[1],xyz[2],xyz[0],xyz[1],xyz[2]);
326  b+b1;
327  }
329  {
330  MG_QUADRANGLE* quad=(MG_QUADRANGLE*)ele;
331  MG_NOEUD* no=quad->get_noeud1();
332  double *xyz=no->get_coord();
333  BOITE_3D b1(xyz[0],xyz[1],xyz[2],xyz[0],xyz[1],xyz[2]);
334  if (i==0) b=b1; else b=b+b1;
335  no=quad->get_noeud2();
336  xyz=no->get_coord();
337  b1.reinit(xyz[0],xyz[1],xyz[2],xyz[0],xyz[1],xyz[2]);
338  b+b1;
339  no=quad->get_noeud3();
340  xyz=no->get_coord();
341  b1.reinit(xyz[0],xyz[1],xyz[2],xyz[0],xyz[1],xyz[2]);
342  b+b1;
343  no=quad->get_noeud4();
344  xyz=no->get_coord();
345  b1.reinit(xyz[0],xyz[1],xyz[2],xyz[0],xyz[1],xyz[2]);
346  b+b1;
347  }
348  }
349  }
350  f<< fac->get_id() << " " << b.get_xmin() << " " << b.get_ymin() << " " << b.get_zmin() << " " << b.get_xmax() << " " << b.get_ymax() << " " << b.get_zmax() << " 0" << std::endl;
351  }
352  LISTE_MG_VOLUME::iterator itv;
353  for (MG_VOLUME* vol=geo->get_premier_volume(itv);vol!=NULL;vol=geo->get_suivant_volume(itv))
354  {
355  BOITE_3D b;
356  if (!vol->est_une_topo_element())
357  {
359  vol->get_topologie_sousjacente(&lst);
361  bool ini=false;
362  for (MG_ELEMENT_TOPOLOGIQUE* ele=lst.get_premier(it);ele!=NULL;ele=lst.get_suivant(it))
363  if (ele->get_type()==MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::SOMMET)
364  {
365  MG_SOMMET* som=(MG_SOMMET*)ele;
366  double xyz[3];
367  som->get_point()->evaluer(xyz);
368  BOITE_3D b1(xyz[0],xyz[1],xyz[2],xyz[0],xyz[1],xyz[2]);
369  if (ini==false) {ini=true;b=b1;} else b=b+b1;
370  }
371  }
372  else
373  {
374  MG_VOLUME_ELEMENT* volele=(MG_VOLUME_ELEMENT*)vol;
375  for (int i=0;i<volele->get_nb_element();i++)
376  {
377  MG_ELEMENT_MAILLAGE* ele=volele->get_element(i);
379  {
380  MG_TETRA* tet=(MG_TETRA*)ele;
381  MG_NOEUD* no=tet->get_noeud1();
382  double *xyz=no->get_coord();
383  BOITE_3D b1(xyz[0],xyz[1],xyz[2],xyz[0],xyz[1],xyz[2]);
384  if (i==0) b=b1; else b=b+b1;
385  no=tet->get_noeud2();
386  xyz=no->get_coord();
387  b1.reinit(xyz[0],xyz[1],xyz[2],xyz[0],xyz[1],xyz[2]);
388  b+b1;
389  no=tet->get_noeud3();
390  xyz=no->get_coord();
391  b1.reinit(xyz[0],xyz[1],xyz[2],xyz[0],xyz[1],xyz[2]);
392  b+b1;
393  no=tet->get_noeud4();
394  xyz=no->get_coord();
395  b1.reinit(xyz[0],xyz[1],xyz[2],xyz[0],xyz[1],xyz[2]);
396  b+b1;
397  }
399  {
400  MG_HEXA* hex=(MG_HEXA*)ele;
401  MG_NOEUD* no=hex->get_noeud1();
402  double *xyz=no->get_coord();
403  BOITE_3D b1(xyz[0],xyz[1],xyz[2],xyz[0],xyz[1],xyz[2]);
404  if (i==0) b=b1; else b=b+b1;
405  no=hex->get_noeud2();
406  xyz=no->get_coord();
407  b1.reinit(xyz[0],xyz[1],xyz[2],xyz[0],xyz[1],xyz[2]);
408  b+b1;
409  no=hex->get_noeud3();
410  xyz=no->get_coord();
411  b1.reinit(xyz[0],xyz[1],xyz[2],xyz[0],xyz[1],xyz[2]);
412  b+b1;
413  no=hex->get_noeud4();
414  xyz=no->get_coord();
415  b1.reinit(xyz[0],xyz[1],xyz[2],xyz[0],xyz[1],xyz[2]);
416  b+b1;
417  no=hex->get_noeud5();
418  xyz=no->get_coord();
419  b1.reinit(xyz[0],xyz[1],xyz[2],xyz[0],xyz[1],xyz[2]);
420  b+b1;
421  no=hex->get_noeud6();
422  xyz=no->get_coord();
423  b1.reinit(xyz[0],xyz[1],xyz[2],xyz[0],xyz[1],xyz[2]);
424  b+b1;
425  no=hex->get_noeud7();
426  xyz=no->get_coord();
427  b1.reinit(xyz[0],xyz[1],xyz[2],xyz[0],xyz[1],xyz[2]);
428  b+b1;
429  no=hex->get_noeud8();
430  xyz=no->get_coord();
431  b1.reinit(xyz[0],xyz[1],xyz[2],xyz[0],xyz[1],xyz[2]);
432  b+b1;
433  }
435  {
436  MG_PENTA* pen=(MG_PENTA*)ele;
437  MG_NOEUD* no=pen->get_noeud1();
438  double *xyz=no->get_coord();
439  BOITE_3D b1(xyz[0],xyz[1],xyz[2],xyz[0],xyz[1],xyz[2]);
440  if (i==0) b=b1; else b=b+b1;
441  no=pen->get_noeud2();
442  xyz=no->get_coord();
443  b1.reinit(xyz[0],xyz[1],xyz[2],xyz[0],xyz[1],xyz[2]);
444  b+b1;
445  no=pen->get_noeud3();
446  xyz=no->get_coord();
447  b1.reinit(xyz[0],xyz[1],xyz[2],xyz[0],xyz[1],xyz[2]);
448  b+b1;
449  no=pen->get_noeud4();
450  xyz=no->get_coord();
451  b1.reinit(xyz[0],xyz[1],xyz[2],xyz[0],xyz[1],xyz[2]);
452  b+b1;
453  no=pen->get_noeud5();
454  xyz=no->get_coord();
455  b1.reinit(xyz[0],xyz[1],xyz[2],xyz[0],xyz[1],xyz[2]);
456  b+b1;
457  no=pen->get_noeud6();
458  xyz=no->get_coord();
459  b1.reinit(xyz[0],xyz[1],xyz[2],xyz[0],xyz[1],xyz[2]);
460  b+b1;
461  }
462  }
463 
464  }
465 
466  f<< vol->get_id() << " " << b.get_xmin() << " " << b.get_ymin() << " " << b.get_zmin() << " " << b.get_xmax() << " " << b.get_ymax() << " " << b.get_zmax() << " 0" << std::endl;
467  }
468 
469  f << "$EndEntities"<< std::endl;
470 
471 }
472 
474 {
475  f << "$MeshFormat"<< std::endl;
476  f << "4.1 0 " << sizeof(double) << std::endl;
477  f << "$EndMeshFormat"<< std::endl;
478  std::map<unsigned long,std::vector<MG_ELEMENT_MAILLAGE*> > entiteno,entiteel,partition;
479  std::map<unsigned long,std::vector<std::pair<int,MG_ELEMENT_MAILLAGE*> > > entiteelno;
480  LISTE_MG_NOEUD::iterator it;
481  int i=0;
482  for (MG_NOEUD* noeud=mai->get_premier_noeud(it);noeud;noeud=mai->get_suivant_noeud(it))
483  {
484  noeud->change_nouveau_numero(i+1);
485  i++;
486  long id=0;
487  if (noeud->get_lien_topologie()!=NULL) id=noeud->get_lien_topologie()->get_id();
488  //unsigned long numpart=(unsigned long)(0.1*(noeud->get_origine()-1000)+1);
489  entiteno[id].push_back(noeud);
490  //partition[numpart].push_back(noeud);
491  }
493  i=0;
494  for (MG_NOEUD* no=lstnoeud.get_premier(itnoeud);no;no=lstnoeud.get_suivant(itnoeud))
495  {
496  i++;
497  long id=0;
498  if (no->get_lien_topologie()!=NULL) id=no->get_lien_topologie()->get_id();
499  std::pair<int,MG_ELEMENT_MAILLAGE*> tmp(i,no);
500  entiteelno[id].push_back(tmp);
501  unsigned long numpart=(unsigned long)(0.1*(no->get_origine()-1000)+1);
502  partition[numpart].push_back(no);
503  }
505  for (MG_SEGMENT* segment=lstsegment.get_premier(itsegment);segment;segment=lstsegment.get_suivant(itsegment))
506  {
507  i++;
508  long id=0;
509  if (segment->get_lien_topologie()!=NULL) id=segment->get_lien_topologie()->get_id();
510  entiteel[id].push_back(segment);
511  segment->change_nouveau_numero(i);
512  unsigned long numpart=(unsigned long)(0.1*(segment->get_origine()-1000)+1);
513  partition[numpart].push_back(segment);
514  }
516  for (MG_TRIANGLE* tri=lsttriangle.get_premier(ittri);tri;tri=lsttriangle.get_suivant(ittri))
517  {
518  i++;
519  long id=0;
520  tri->change_nouveau_numero(i);
521  if (tri->get_lien_topologie()!=NULL) id=tri->get_lien_topologie()->get_id();
522  entiteel[id].push_back(tri);
523  unsigned long numpart=(unsigned long)(0.1*(tri->get_origine()-1000)+1);
524  partition[numpart].push_back(tri);
525  }
527  for (MG_QUADRANGLE* quad=lstquadrangle.get_premier(itquad);quad;quad=lstquadrangle.get_suivant(itquad))
528  {
529  i++;
530  long id=0;
531  if (quad->get_lien_topologie()!=NULL) id=quad->get_lien_topologie()->get_id();
532  quad->change_nouveau_numero(i);
533  entiteel[id].push_back(quad);
534  unsigned long numpart=(unsigned long)(0.1*(quad->get_origine()-1000)+1);
535  partition[numpart].push_back(quad);
536  }
538  for (MG_TETRA* tet=lsttetra.get_premier(ittet);tet;tet=lsttetra.get_suivant(ittet))
539  {
540  i++;
541  long id=0;
542  if (tet->get_lien_topologie()!=NULL) id=tet->get_lien_topologie()->get_id();
543  tet->change_nouveau_numero(i);
544  entiteel[id].push_back(tet);
545  unsigned long numpart=(unsigned long)(0.1*(tet->get_origine()-1000)+1);
546  partition[numpart].push_back(tet);
547  }
549  for (MG_HEXA* hex=lsthexa.get_premier(ithex);hex;hex=lsthexa.get_suivant(ithex))
550  {
551  i++;
552  long id=0;
553  if (hex->get_lien_topologie()!=NULL) id=hex->get_lien_topologie()->get_id();
554  hex->change_nouveau_numero(i);
555  entiteel[id].push_back(hex);
556  unsigned long numpart=(unsigned long)(0.1*(hex->get_origine()-1000)+1);
557  partition[numpart].push_back(hex);
558  }
560  for (MG_PENTA* pen=lstpenta.get_premier(itpen);pen;pen=lstpenta.get_suivant(itpen))
561  {
562  i++;
563  long id=0;
564  if (pen->get_lien_topologie()!=NULL) id=pen->get_lien_topologie()->get_id();
565  pen->change_nouveau_numero(i);
566  entiteel[id].push_back(pen);
567  unsigned long numpart=(unsigned long)(0.1*(pen->get_origine()-1000)+1);
568  partition[numpart].push_back(pen);
569  }
571  for (MG_PYRAMIDE* pyr=lstpyramide.get_premier(itpyr);pyr;pyr=lstpyramide.get_suivant(itpyr))
572  {
573  i++;
574  long id=0;
575  if (pyr->get_lien_topologie()!=NULL) id=pyr->get_lien_topologie()->get_id();
576  pyr->change_nouveau_numero(i);
577  entiteel[id].push_back(pyr);
578  unsigned long numpart=(unsigned long)(0.1*(pyr->get_origine()-1000)+1);
579  partition[numpart].push_back(pyr);
580  }
581  MG_GEOMETRIE* geo=mai->get_mg_geometrie();
582  if (geo!=NULL) gmsh41entities(f,geo);
583  else
584  {
585  if (lsthexa.get_nb()+lstpenta.get_nb()+lsttetra.get_nb()+lstpyramide.get_nb()!=0) MG_MAILLAGE::DIMENSIONMAILLAGESANSTOPO=3;
586  else if (lstquadrangle.get_nb()+lsttriangle.get_nb()!=0) MG_MAILLAGE::DIMENSIONMAILLAGESANSTOPO=2;
587  else if (lstsegment.get_nb()!=0) MG_MAILLAGE::DIMENSIONMAILLAGESANSTOPO=1;
589  }
590  f << "$Nodes"<< std::endl;
591  int nbnoeud=mai->get_nb_mg_noeud();
592  f << entiteno.size() << " " << nbnoeud<< " 1 "<< nbnoeud << std::endl;
593  for (std::map<unsigned long,std::vector<MG_ELEMENT_MAILLAGE*> >::iterator itn=entiteno.begin();itn!=entiteno.end();itn++)
594  {
595  MG_ELEMENT_TOPOLOGIQUE* topo=itn->second[0]->get_lien_topologie();
596  if (topo!=NULL) f << topo->get_dimension() << " " << itn->first << " 0 " << itn->second.size() << std::endl;
597  else if (geo==NULL) f << MG_MAILLAGE::DIMENSIONMAILLAGESANSTOPO << " 1 0 " << itn->second.size() << std::endl;
598  for (int i=0;i<itn->second.size();i++)
599  f << itn->second[i]->get_nouveau_numero() << std::endl;
600  for (int i=0;i<itn->second.size();i++)
601  {
602  MG_NOEUD* no=(MG_NOEUD*)itn->second[i];
603  f << no->get_x() << " " << no->get_y() << " " << no->get_z() << std::endl;
604  }
605  }
606  f<<"$EndNodes"<< std::endl;
607  f<<"$Elements"<< std::endl;
608  int nbele=lstnoeud.get_nb()+lstsegment.get_nb()+lsttriangle.get_nb()+lstquadrangle.get_nb()+lsttetra.get_nb()+lsthexa.get_nb()+lstpenta.get_nb()+lstpyramide.get_nb();
609  f<<entiteelno.size()+entiteel.size()<< " " << nbele << " 1 " << nbele << std::endl;
610  for (std::map<unsigned long,std::vector<std::pair<int,MG_ELEMENT_MAILLAGE*> > >::iterator itn=entiteelno.begin();itn!=entiteelno.end();itn++)
611  {
612  int dim=0;
613  if (itn->second[0].second->get_lien_topologie()!=NULL) dim=itn->second[0].second->get_lien_topologie()->get_dimension();
614  f<< dim << " " << itn->first << " 15 " << itn->second.size() << std::endl;
615  for (int i=0;i<itn->second.size();i++)
616  f<< itn->second[i].first << " " << itn->second[i].second->get_nouveau_numero() << std::endl;
617  }
618  for (std::map<unsigned long,std::vector<MG_ELEMENT_MAILLAGE*> >::iterator itn=entiteel.begin();itn!=entiteel.end();itn++)
619  {
620  int dim=0;
621  if (itn->second[0]->get_lien_topologie()!=NULL) dim=itn->second[0]->get_lien_topologie()->get_dimension();
622  if (geo==NULL) dim=MG_MAILLAGE::DIMENSIONMAILLAGESANSTOPO;
623  int typegmsh;
624  MG_ELEMENT_MAILLAGE* ele=itn->second[0];
625  if (ele->get_type_entite()==MAGIC::TYPE_ENTITE::IDMG_SEGMENT) typegmsh=1;
626  if (ele->get_type_entite()==MAGIC::TYPE_ENTITE::IDMG_TRIANGLE) typegmsh=2;
628  if (ele->get_type_entite()==MAGIC::TYPE_ENTITE::IDMG_TETRA) typegmsh=4;
629  if (ele->get_type_entite()==MAGIC::TYPE_ENTITE::IDMG_HEXA) typegmsh=5;
630  if (ele->get_type_entite()==MAGIC::TYPE_ENTITE::IDMG_PENTA) typegmsh=6;
631  if (ele->get_type_entite()==MAGIC::TYPE_ENTITE::IDMG_PYRAMIDE) typegmsh=7;
632  int identite=itn->first;
633  if (geo==NULL) identite=1;
634  f<< dim << " " << identite << " " << typegmsh << " " << itn->second.size() << std::endl;
635  for (int i=0;i<itn->second.size();i++)
636  {
637  MG_ELEMENT_MAILLAGE* ele=itn->second[i];
638  f<< itn->second[i]->get_nouveau_numero() << " " ;
639  std::vector<int> tabnoeud;
640  if (typegmsh==1)
641  {
642  MG_SEGMENT* seg=(MG_SEGMENT*)ele;
643  tabnoeud.push_back(seg->get_noeud1()->get_nouveau_numero());
644  tabnoeud.push_back(seg->get_noeud2()->get_nouveau_numero());
645  }
646  if (typegmsh==2)
647  {
648  MG_TRIANGLE* tri=(MG_TRIANGLE*)ele;
649  tabnoeud.push_back(tri->get_noeud1()->get_nouveau_numero());
650  tabnoeud.push_back(tri->get_noeud2()->get_nouveau_numero());
651  tabnoeud.push_back(tri->get_noeud3()->get_nouveau_numero());
652  }
653  if (typegmsh==3)
654  {
655  MG_QUADRANGLE* qua=(MG_QUADRANGLE*)ele;
656  tabnoeud.push_back(qua->get_noeud1()->get_nouveau_numero());
657  tabnoeud.push_back(qua->get_noeud2()->get_nouveau_numero());
658  tabnoeud.push_back(qua->get_noeud3()->get_nouveau_numero());
659  tabnoeud.push_back(qua->get_noeud4()->get_nouveau_numero());
660  }
661  if (typegmsh==4)
662  {
663  MG_TETRA* tet=(MG_TETRA*)ele;
664  tabnoeud.push_back(tet->get_noeud1()->get_nouveau_numero());
665  tabnoeud.push_back(tet->get_noeud2()->get_nouveau_numero());
666  tabnoeud.push_back(tet->get_noeud3()->get_nouveau_numero());
667  tabnoeud.push_back(tet->get_noeud4()->get_nouveau_numero());
668  }
669  if (typegmsh==5)
670  {
671  MG_HEXA* hex=(MG_HEXA*)ele;
672  tabnoeud.push_back(hex->get_noeud1()->get_nouveau_numero());
673  tabnoeud.push_back(hex->get_noeud2()->get_nouveau_numero());
674  tabnoeud.push_back(hex->get_noeud3()->get_nouveau_numero());
675  tabnoeud.push_back(hex->get_noeud4()->get_nouveau_numero());
676  tabnoeud.push_back(hex->get_noeud5()->get_nouveau_numero());
677  tabnoeud.push_back(hex->get_noeud6()->get_nouveau_numero());
678  tabnoeud.push_back(hex->get_noeud7()->get_nouveau_numero());
679  tabnoeud.push_back(hex->get_noeud8()->get_nouveau_numero());
680  }
681  if (typegmsh==6)
682  {
683  MG_PENTA* pen=(MG_PENTA*)ele;
684  tabnoeud.push_back(pen->get_noeud1()->get_nouveau_numero());
685  tabnoeud.push_back(pen->get_noeud2()->get_nouveau_numero());
686  tabnoeud.push_back(pen->get_noeud3()->get_nouveau_numero());
687  tabnoeud.push_back(pen->get_noeud4()->get_nouveau_numero());
688  tabnoeud.push_back(pen->get_noeud5()->get_nouveau_numero());
689  tabnoeud.push_back(pen->get_noeud6()->get_nouveau_numero());
690  }
691  if (typegmsh==7)
692  {
693  MG_PYRAMIDE* pyr=(MG_PYRAMIDE*)ele;
694  tabnoeud.push_back(pyr->get_noeud1()->get_nouveau_numero());
695  tabnoeud.push_back(pyr->get_noeud2()->get_nouveau_numero());
696  tabnoeud.push_back(pyr->get_noeud3()->get_nouveau_numero());
697  tabnoeud.push_back(pyr->get_noeud4()->get_nouveau_numero());
698  tabnoeud.push_back(pyr->get_noeud5()->get_nouveau_numero());
699  }
700  for (int j=0;j<tabnoeud.size();j++)
701  f << tabnoeud[j] << " ";
702  f << std::endl;
703  }
704  }
705 
706  f<<"$EndElements"<< std::endl;
707  if (partition.size()>1) gmsh41partition(f,mai,lstnoeud,lstsegment,lsttriangle,lstquadrangle,lsttetra,lsthexa,lstpenta,lstpyramide);
708 }
709 
711 {
712 
713  f << "$MeshFormat"<< std::endl;
714  f << "2 0 " << sizeof(double) << std::endl;
715  f << "$EndMeshFormat"<< std::endl;
716  f << "$Nodes"<< std::endl;
717  int nbnoeud=mai->get_nb_mg_noeud();
718 
719  LISTE_MG_NOEUD::iterator it;
720  f << nbnoeud<< std::endl;
721  int i=0;
722  //double facteur_unite=mai->get_mg_geometrie()->get_valeur_unite();
723  double facteur_unite=1.;
724  for (MG_NOEUD* noeud=mai->get_premier_noeud(it);noeud;noeud=mai->get_suivant_noeud(it))
725  {
726  noeud->change_nouveau_numero(i+1);
727  double *coord=noeud->get_coord();
728  f << i+1 << " " << coord[0]*facteur_unite << " " << coord[1]*facteur_unite << " " << coord[2]*facteur_unite << std::endl;
729  i++;
730  }
731  f<<"$EndNodes"<< std::endl;
732  f<<"$Elements"<< std::endl;
733  int nbelement=lstnoeud.get_nb()+lstsegment.get_nb()+lsttriangle.get_nb()+lsttetra.get_nb()+lstquadrangle.get_nb()+lsthexa.get_nb()+lstpenta.get_nb()+lstpyramide.get_nb();
734  f << nbelement << std::endl;
735  i=0;
737  for (MG_NOEUD* no=lstnoeud.get_premier(itnoeud);no;no=lstnoeud.get_suivant(itnoeud))
738  {
739  long id=0;
740  if (no->get_lien_topologie()!=NULL) id=no->get_lien_topologie()->get_id();
741  f << ++i << " 15 3 " << couleur(no->get_lien_topologie()) << " " << id << " " << (int)(0.1*(no->get_origine()-1000)+1) << " " << no->get_nouveau_numero() << std::endl;
742  //no->change_nouveau_numero(i);
743  }
745  for (MG_SEGMENT* segment=lstsegment.get_premier(itsegment);segment;segment=lstsegment.get_suivant(itsegment))
746  {
747  long id=0;
748  if (segment->get_lien_topologie()!=NULL) id=segment->get_lien_topologie()->get_id();
749  f << ++i << " 1 3 " << couleur(segment->get_lien_topologie()) << " " << id << " " << (int)(0.1*(segment->get_origine()-1000)+1) << " " << segment->get_noeud1()->get_nouveau_numero() << " " << segment->get_noeud2()->get_nouveau_numero() << std::endl;
750  segment->change_nouveau_numero(i);
751  }
753  for (MG_TRIANGLE* tri=lsttriangle.get_premier(ittri);tri;tri=lsttriangle.get_suivant(ittri))
754  {
755  long id=0;
756  if (tri->get_lien_topologie()!=NULL) id=tri->get_lien_topologie()->get_id();
757  f << ++i << " 2 3 " << couleur(tri->get_lien_topologie()) << " " << id << " " << (int)(0.1*(tri->get_origine()-1000)+1) << " " << tri->get_noeud1()->get_nouveau_numero() << " " << tri->get_noeud2()->get_nouveau_numero() << " " << tri->get_noeud3()->get_nouveau_numero() << std::endl;
758  tri->change_nouveau_numero(i);
759  }
761  for (MG_QUADRANGLE* quad=lstquadrangle.get_premier(itquad);quad;quad=lstquadrangle.get_suivant(itquad))
762  {
763  long id=0;
764  if (quad->get_lien_topologie()!=NULL) id=quad->get_lien_topologie()->get_id();
765  f << ++i << " 3 3 " << couleur(quad->get_lien_topologie()) << " " << id << " " << (int)(0.1*(quad->get_origine()-1000)+1) << " " << quad->get_noeud1()->get_nouveau_numero() << " " << quad->get_noeud2()->get_nouveau_numero() << " " << quad->get_noeud3()->get_nouveau_numero() << " " << quad->get_noeud4()->get_nouveau_numero() << std::endl;
766  quad->change_nouveau_numero(i);
767  }
769  for (MG_TETRA* tet=lsttetra.get_premier(ittet);tet;tet=lsttetra.get_suivant(ittet))
770  {
771  long id=0;
772  if (tet->get_lien_topologie()!=NULL) id=tet->get_lien_topologie()->get_id();
773  f << ++i << " 4 3 " << couleur(tet->get_lien_topologie()) << " "<< id << " " << (int)(0.1*(tet->get_origine()-1000)+1) << " " << tet->get_noeud1()->get_nouveau_numero() << " " << tet->get_noeud2()->get_nouveau_numero() << " " << tet->get_noeud3()->get_nouveau_numero() << " " << tet->get_noeud4()->get_nouveau_numero()<< std::endl;
774  tet->change_nouveau_numero(i);
775  }
777  for (MG_HEXA* hex=lsthexa.get_premier(ithex);hex;hex=lsthexa.get_suivant(ithex))
778  {
779  long id=0;
780  if (hex->get_lien_topologie()!=NULL) id=hex->get_lien_topologie()->get_id();
781  f << ++i << " 5 3 " << couleur(hex->get_lien_topologie()) << " "<< id << " " << (int)(0.1*(hex->get_origine()-1000)+1) << " " << hex->get_noeud1()->get_nouveau_numero() << " " << hex->get_noeud2()->get_nouveau_numero() << " " << hex->get_noeud3()->get_nouveau_numero() << " " << hex->get_noeud4()->get_nouveau_numero()<< " " << hex->get_noeud5()->get_nouveau_numero() << " " << hex->get_noeud6()->get_nouveau_numero() << " " << hex->get_noeud7()->get_nouveau_numero() << " " << hex->get_noeud8()->get_nouveau_numero() << std::endl;
782  hex->change_nouveau_numero(i);
783  }
785  for (MG_PENTA* pen=lstpenta.get_premier(itpen);pen;pen=lstpenta.get_suivant(itpen))
786  {
787  long id=0;
788  if (pen->get_lien_topologie()!=NULL) id=pen->get_lien_topologie()->get_id();
789  f << ++i << " 6 3 " << couleur(pen->get_lien_topologie()) << " "<< id << " " << (int)(0.1*(pen->get_origine()-1000)+1) << " " << pen->get_noeud1()->get_nouveau_numero() << " " << pen->get_noeud2()->get_nouveau_numero() << " " << pen->get_noeud3()->get_nouveau_numero() << " " << pen->get_noeud4()->get_nouveau_numero()<< " " << pen->get_noeud5()->get_nouveau_numero() << " " << pen->get_noeud6()->get_nouveau_numero() << std::endl;
790  pen->change_nouveau_numero(i);
791  }
793  for (MG_PYRAMIDE* pyr=lstpyramide.get_premier(itpyr);pyr;pyr=lstpyramide.get_suivant(itpyr))
794  {
795  long id=0;
796  if (pyr->get_lien_topologie()!=NULL) id=pyr->get_lien_topologie()->get_id();
797  f << ++i << " 7 3 " << couleur(pyr->get_lien_topologie()) << " "<< id << " " << (int)(0.1*(pyr->get_origine()-1000)+1) << " " << pyr->get_noeud1()->get_nouveau_numero() << " " << pyr->get_noeud2()->get_nouveau_numero() << " " << pyr->get_noeud3()->get_nouveau_numero() << " " << pyr->get_noeud4()->get_nouveau_numero()<< " " << pyr->get_noeud5()->get_nouveau_numero() << std::endl;
798  pyr->change_nouveau_numero(i);
799  }
800  f<<"$EndElements"<< std::endl;
801 }
802 
803 void MG_EXPORT::gmsh(MG_MAILLAGE* mai,std::string nomfichier)
804 {
805  TPL_MAP_ENTITE<MG_NOEUD*> lstnoeud;
806  TPL_MAP_ENTITE<MG_SEGMENT*> lstsegment;
807  TPL_MAP_ENTITE<MG_TRIANGLE*> lsttriangle;
808  TPL_MAP_ENTITE<MG_TETRA*> lsttetra;
809  TPL_MAP_ENTITE<MG_QUADRANGLE*> lstquadrangle;
810  TPL_MAP_ENTITE<MG_HEXA*> lsthexa;
811  TPL_MAP_ENTITE<MG_PENTA*> lstpenta;
812  TPL_MAP_ENTITE<MG_PYRAMIDE*> lstpyramide;
813  decompose_maillage(mai,lstnoeud,lstsegment,lsttriangle,lstquadrangle,lsttetra,lsthexa,lstpenta,lstpyramide);
814  std::ofstream f;
815  std::string file=nomfichier+".msh";
816  f.open(file.c_str(),std::ios::out);
817  f.precision(16);
818  f.setf(std::ios::showpoint);
819 
820  double versiongmsh=paramversiongmsh();
821  if (versiongmsh<4.) gmsh2(f,mai,lstnoeud,lstsegment,lsttriangle,lstquadrangle,lsttetra,lsthexa,lstpenta,lstpyramide);
822  else gmsh41(f,mai,lstnoeud,lstsegment,lsttriangle,lstquadrangle,lsttetra,lsthexa,lstpenta,lstpyramide);
823 
824 
825 
826  MG_GESTIONNAIRE* gest=mai->get_gestionnaire();
827  int nbsol=gest->get_nb_mg_solution();
828  int ok=0;
829  if (nbsol!=0)
830  {
831  for (int i=0;i<nbsol;i++)
832  {
833  MG_SOLUTION* sol=gest->get_mg_solution(i);
834  if (sol->get_maillage()==mai) ok=1;
835  }
836  }
837  if (ok==1)
838  {
839  for (int i=0;i<nbsol;i++)
840  {
841  MG_SOLUTION* sol=gest->get_mg_solution(i);
842  if (sol->get_maillage()!=mai) continue;
843  int nb_champs=sol->get_nb_champ();
844  for (int j=0;j<nb_champs;j++)
845  {
846  int typesol=sol->get_entite_solution();
847  if (typesol==MAGIC::ENTITE_SOLUTION::ENTITE_NOEUD) f <<"$NodeData"<< std::endl;
848  else if (typesol==MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT1) f <<"$ElementData"<< std::endl;
849  else if (typesol==MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT2) f <<"$ElementData"<< std::endl;
850  else if (typesol==MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT3) f <<"$ElementData"<< std::endl;
851  else if (typesol==MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT1_NOEUD) f <<"$ElementNodeData"<< std::endl;
852  else if (typesol==MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT2_NOEUD) f <<"$ElementNodeData"<< std::endl;
853  else if (typesol==MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT3_NOEUD) f <<"$ElementNodeData"<< std::endl;
854  f<<"1"<<std::endl;
855  std::string nom=sol->get_nom()+ "_" + sol->get_legende(j);
856  for (int k=0;k<nom.length();k++) if (nom[k]==' ') nom[k]='_';
857  f<<"\""+nom+"\""<<std::endl;
858  f<<"1"<<std::endl;
859  f<<"0.0"<<std::endl;
860  f<<"3"<<std::endl;
861  f<<"0"<<std::endl;
862  f<<sol->get_dim_solution()<<std::endl;
864  {
865  int k=0;
866  f<<mai->get_nb_mg_noeud()<<std::endl;
868  for (MG_NOEUD* noeud=mai->get_premier_noeud(it);noeud;noeud=mai->get_suivant_noeud(it))
869  {
870  f<< noeud->get_nouveau_numero() << " " ;
871  for (int coord=0;coord<sol->get_dim_solution();coord++)
872  f << " " << sol->lire(k,j,coord);
873  f<<std::endl;
874  k++;
875  }
876 
877  }
879  {
880  int k=0;
881  int nb1=lsttetra.get_nb()+lsthexa.get_nb();
882  f<<nb1<<std::endl;
884  for (MG_TETRA* tet=lsttetra.get_premier(ittet);tet;tet=lsttetra.get_suivant(ittet))
885  {
886  f<< tet->get_nouveau_numero() << " " ;
887  for (int coord=0;coord<sol->get_dim_solution();coord++)
888  f << " " << sol->lire(k,j,coord);
889  f<<std::endl;
890  k++;
891  }
893  for (MG_HEXA* hex=lsthexa.get_premier(ithex);hex;hex=lsthexa.get_suivant(ithex))
894  {
895  f<< hex->get_nouveau_numero() << " " ;
896  for (int coord=0;coord<sol->get_dim_solution();coord++)
897  f << " " << sol->lire(k,j,coord);
898  f<<std::endl;
899  k++;
900  }
901  }
903  {
904  int k=0;
905  int nb2=lsttriangle.get_nb()+lstquadrangle.get_nb();
906  f<<nb2<<std::endl;
908  for (MG_TRIANGLE* tri=lsttriangle.get_premier(ittri);tri;tri=lsttriangle.get_suivant(ittri))
909  {
910  f<< tri->get_nouveau_numero() << " ";
911  for (int coord=0;coord<sol->get_dim_solution();coord++)
912  f << " " << sol->lire(k,j,coord);
913  f<<std::endl;
914  k++;
915  }
917  for (MG_QUADRANGLE* quad=lstquadrangle.get_premier(itquad);quad;quad=lstquadrangle.get_suivant(itquad))
918  {
919  f<< quad->get_nouveau_numero() << " ";
920  for (int coord=0;coord<sol->get_dim_solution();coord++)
921  f << " " << sol->lire(k,j,coord);
922  f<<std::endl;
923  k++;
924  }
925  }
927  {
928  int k=0;
929  int nb3=lstsegment.get_nb();
930  f<<nb3<<std::endl;
932  for (MG_SEGMENT* segment=lstsegment.get_premier(itsegment);segment;segment=lstsegment.get_suivant(itsegment))
933  {
934  f<< segment->get_nouveau_numero() << " ";
935  for (int coord=0;coord<sol->get_dim_solution();coord++)
936  f << " " << sol->lire(k,j,coord);
937  f<<std::endl;
938  k++;
939  }
940  }
942  {
943  int nb1=mai->get_nb_mg_segment();
944  f<<nb1<<std::endl;
945  LISTE_MG_SEGMENT::iterator it;
946  int k=0;
947  for (MG_SEGMENT* ele=mai->get_premier_segment(it);ele;ele=mai->get_suivant_segment(it))
948  {
949  int num=2;
950  f<<ele->get_nouveau_numero()<< " " << num <<" ";
951  for (int l=0;l<num;l++)
952  for (int coord=0;coord<sol->get_dim_solution();coord++)
953  f << sol->lire(k,j,coord,l) << " ";
954  f << std::endl;
955  k++;
956  }
957  }
959  {
960  int nb1=mai->get_nb_mg_triangle()+mai->get_nb_mg_quadrangle();
961  f<<nb1<<std::endl;
962  int k=0;
963  LISTE_MG_TRIANGLE::iterator it;
964  for (MG_TRIANGLE* ele=mai->get_premier_triangle(it);ele;ele=mai->get_suivant_triangle(it))
965  {
966  int num=3;
967  f<<ele->get_nouveau_numero()<< " " << num <<" ";
968  for (int l=0;l<num;l++)
969  for (int coord=0;coord<sol->get_dim_solution();coord++)
970  f << sol->lire(k,j,coord,l) << " ";
971  f << std::endl;
972  k++;
973  }
974  LISTE_MG_QUADRANGLE::iterator itq;
975  for (MG_QUADRANGLE* ele=mai->get_premier_quadrangle(itq);ele;ele=mai->get_suivant_quadrangle(itq))
976  {
977  int num=4;
978  f<<ele->get_nouveau_numero()<< " " << num <<" ";
979  for (int l=0;l<num;l++)
980  for (int coord=0;coord<sol->get_dim_solution();coord++)
981  f << sol->lire(k,j,coord,l) << " ";
982  f << std::endl;
983  k++;
984  }
985  }
987  {
988  int nb1=mai->get_nb_mg_tetra()+mai->get_nb_mg_hexa();
989  f<<nb1<<std::endl;
990  int k=0;
991  LISTE_MG_TETRA::iterator it;
992  for (MG_TETRA* ele=mai->get_premier_tetra(it);ele;ele=mai->get_suivant_tetra(it))
993  {
994  int num=4;
995  f<<ele->get_nouveau_numero()<< " " << num <<" ";
996  for (int l=0;l<num;l++)
997  for (int coord=0;coord<sol->get_dim_solution();coord++)
998  f << sol->lire(k,j,coord,l) << " ";
999  f << std::endl;
1000  k++;
1001  }
1002  LISTE_MG_HEXA::iterator ith;
1003  for (MG_HEXA* ele=mai->get_premier_hexa(ith);ele;ele=mai->get_suivant_hexa(ith))
1004  {
1005  int num=8;
1006  f<<ele->get_nouveau_numero()<< " " << num <<" ";
1007  for (int l=0;l<num;l++)
1008  for (int coord=0;coord<sol->get_dim_solution();coord++)
1009  f << sol->lire(k,j,coord,l) << " ";
1010  f << std::endl;
1011  k++;
1012  }
1013  }
1014  if (typesol==MAGIC::ENTITE_SOLUTION::ENTITE_NOEUD) f <<"$EndNodeData"<< std::endl;
1015  else if (typesol==MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT1) f <<"$EndElementData"<< std::endl;
1016  else if (typesol==MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT2) f <<"$EndElementData"<< std::endl;
1017  else if (typesol==MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT3) f <<"$EndElementData"<< std::endl;
1018  else if (typesol==MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT1_NOEUD) f <<"$ElementEndNodeData"<< std::endl;
1019  else if (typesol==MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT2_NOEUD) f <<"$ElementEndNodeData"<< std::endl;
1020  else if (typesol==MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT3_NOEUD) f <<"$ElementEndNodeData"<< std::endl;
1021  }
1022 
1023  }
1024  }
1025 
1026  f.close();
1027 
1028 
1029 }
1030 
1031 void MG_EXPORT::gmsh_avec_correspondance(class FEM_MAILLAGE* mai,std::string fichier)
1032 {
1033 gmsh(mai,fichier);
1034 std::ofstream f;
1035 std::string file=fichier+".cormsh";
1036 f.open(file.c_str(),std::ios::out);
1037 f.precision(16);
1038 f.setf(std::ios::showpoint);
1039 
1040 bool numopt=false;
1041 LISTE_FEM_NOEUD::iterator it;
1042 for (FEM_NOEUD* noeud=mai->get_premier_noeud(it);noeud;noeud=mai->get_suivant_noeud(it))
1043 {
1044  if (noeud->get_numero_opt()!=-1)
1045  numopt=true;
1046  if (numopt)
1047  f << "NO-" << noeud->get_numero() << "::" << noeud->get_id() << "::" << noeud->get_numero_opt() << std::endl;
1048  else if(!numopt)
1049  f << "NO-" << noeud->get_numero() << "::" << noeud->get_id() << std::endl;
1050 }
1051 
1052 LISTE_FEM_ELEMENT0::iterator itelementnoeud;
1053 for (FEM_ELEMENT0* noeud=mai->get_premier_element0(itelementnoeud);noeud;noeud=mai->get_suivant_element0(itelementnoeud))
1054  f << "NL-" << noeud->get_numero() << "::" << noeud->get_id() << std::endl;;
1055 LISTE_FEM_ELEMENT1::iterator itsegment;
1056 for (FEM_ELEMENT1* segment=mai->get_premier_element1(itsegment);segment;segment=mai->get_suivant_element1(itsegment))
1057  f << "E1-" << segment->get_numero() << "::" << segment->get_id() << std::endl;;
1058 LISTE_FEM_ELEMENT2::iterator ittriangle;
1059 for (FEM_ELEMENT2* triangle=mai->get_premier_element2(ittriangle);triangle;triangle=mai->get_suivant_element2(ittriangle))
1060  f << "E2-" << triangle->get_numero() << "::" << triangle->get_id() << std::endl;;
1061 LISTE_FEM_ELEMENT3::iterator ittetra;
1062 for (FEM_ELEMENT3* tetra=mai->get_premier_element3(ittetra);tetra;tetra=mai->get_suivant_element3(ittetra))
1063  f << "E3-" << tetra->get_numero() << "::" << tetra->get_id() << std::endl;;
1064 LISTE_XFEM_ELEMENT0::iterator itxelementnoeud;
1065 for (XFEM_ELEMENT0* noeud=mai->get_premier_xelement0(itxelementnoeud);noeud;noeud=mai->get_suivant_xelement0(itxelementnoeud))
1066  f << "X0-" << noeud->get_numero() << "::" << noeud->get_id() << std::endl;;
1067 LISTE_XFEM_ELEMENT1::iterator itxsegment;
1068 for (XFEM_ELEMENT1* segment=mai->get_premier_xelement1(itxsegment);segment;segment=mai->get_suivant_xelement1(itxsegment))
1069  f << "X1-" << segment->get_numero() << "::" << segment->get_id() << std::endl;;
1070 LISTE_XFEM_ELEMENT2::iterator itxtriangle;
1071 for (XFEM_ELEMENT2* triangle=mai->get_premier_xelement2(itxtriangle);triangle;triangle=mai->get_suivant_xelement2(itxtriangle))
1072  f << "X2-" << triangle->get_numero() << "::" << triangle->get_id() << std::endl;;
1073 LISTE_XFEM_ELEMENT3::iterator itxtetra;
1074 for (XFEM_ELEMENT3* xtetra=mai->get_premier_xelement3(itxtetra);xtetra;xtetra=mai->get_suivant_xelement3(itxtetra))
1075  f << "X3-" << xtetra->get_numero() << "::" << xtetra->get_id() << std::endl;
1076 
1077 
1078 }
1079 
1080 void MG_EXPORT::gmsh_avec_correspondance(class MG_MAILLAGE* mai,std::string fichier)
1081 {
1082 gmsh(mai,fichier);
1083 std::ofstream f;
1084 std::string file=fichier+".cormsh";
1085 f.open(file.c_str(),std::ios::out);
1086 f.precision(16);
1087 f.setf(std::ios::showpoint);
1088 LISTE_MG_NOEUD::iterator it;
1089 for (MG_NOEUD* noeud=mai->get_premier_noeud(it);noeud;noeud=mai->get_suivant_noeud(it))
1090  f << "NO-" << noeud->get_nouveau_numero() << "::" << noeud->get_id() << std::endl;;
1091 LISTE_MG_SEGMENT::iterator its;
1092 for (MG_SEGMENT* seg=mai->get_premier_segment(its);seg;seg=mai->get_suivant_segment(its))
1093  f << "SG-" << seg->get_nouveau_numero() << "::" << seg->get_id() << std::endl;;
1094 LISTE_MG_TRIANGLE::iterator itt;
1095 for (MG_TRIANGLE* tri=mai->get_premier_triangle(itt);tri;tri=mai->get_suivant_triangle(itt))
1096  f << "TR-" << tri->get_nouveau_numero() << "::" << tri->get_id() << std::endl;;
1097 LISTE_MG_QUADRANGLE::iterator itq;
1098 for (MG_QUADRANGLE* quad=mai->get_premier_quadrangle(itq);quad;quad=mai->get_suivant_quadrangle(itq))
1099  f << "QR-" << quad->get_nouveau_numero() << "::" << quad->get_id() << std::endl;;
1100 LISTE_MG_TETRA::iterator itte;
1101 for (MG_TETRA* tet=mai->get_premier_tetra(itte);tet;tet=mai->get_suivant_tetra(itte))
1102  f << "TE-" << tet->get_nouveau_numero() << "::" << tet->get_id() << std::endl;;
1103 LISTE_MG_HEXA::iterator ith;
1104 for (MG_HEXA* hex=mai->get_premier_hexa(ith);hex;hex=mai->get_suivant_hexa(ith))
1105  f << "HX-" << hex->get_nouveau_numero() << "::" << hex->get_id() << std::endl;;
1106 
1107 
1108 
1109 
1110 }
1111 void MG_EXPORT::gmsh2(std::ofstream &f,FCT_TAILLE_FEM_SOLUTION* carte)
1112 {
1113 FEM_MAILLAGE* mai=carte->get_maillage();
1114 f << "$MeshFormat"<< std::endl;
1115  f << "2 0 " << sizeof(double) << std::endl;
1116  f << "$EndMeshFormat"<< std::endl;
1117  f << "$Nodes"<< std::endl;
1118  int nbnoeud=mai->get_nb_fem_noeud();
1119  LISTE_FEM_NOEUD::iterator it;
1120  f << nbnoeud<< std::endl;
1121  int i=0;
1122  for (FEM_NOEUD* noeud=mai->get_premier_noeud(it);noeud;noeud=mai->get_suivant_noeud(it))
1123  {
1124  noeud->change_numero(i+1);
1125  double *coord=noeud->get_coord();
1126  f << i+1 << " " << coord[0] << " " << coord[1] << " " << coord[2] << std::endl;
1127  i++;
1128  }
1129  f<<"$EndNodes"<< std::endl;
1130  f<<"$Elements"<< std::endl;
1132  f << nbelement << std::endl;
1133  i=0;
1134  LISTE_FEM_ELEMENT0::iterator itelementnoeud;
1135  for (FEM_ELEMENT0* noeud=mai->get_premier_element0(itelementnoeud);noeud;noeud=mai->get_suivant_element0(itelementnoeud))
1136  {
1137  unsigned long idref=0;
1138  if (noeud->get_lien_topologie()!=NULL) idref=noeud->get_lien_topologie()->get_id();
1139  f << ++i << " 15 2 1 " << idref << " " << noeud->get_fem_noeud(0)->get_numero() << std::endl;
1140  }
1141  LISTE_FEM_ELEMENT1::iterator itsegment;
1142  for (FEM_ELEMENT1* segment=mai->get_premier_element1(itsegment);segment;segment=mai->get_suivant_element1(itsegment))
1143  {
1144  unsigned long idref=0;
1145  if (segment->get_lien_topologie()!=NULL) idref=segment->get_lien_topologie()->get_id();
1146  if (mai->get_degre()==1) f << ++i << " 1 2 1 " << idref << " " << segment->get_fem_noeud(0)->get_numero() << " " << segment->get_fem_noeud(1)->get_numero() << std::endl;
1147  if (mai->get_degre()==2) f << ++i << " 8 2 1 " << idref << " " << segment->get_fem_noeud(0)->get_numero() << " " << segment->get_fem_noeud(2)->get_numero() << " " << segment->get_fem_noeud(1)->get_numero() << std::endl;
1148  segment->change_numero(i);
1149  }
1150  LISTE_FEM_ELEMENT2::iterator ittriangle;
1151  for (FEM_ELEMENT2* triangle=mai->get_premier_element2(ittriangle);triangle;triangle=mai->get_suivant_element2(ittriangle))
1152  {
1153  unsigned long idref=0;
1154  if (triangle->get_lien_topologie()!=NULL) idref=triangle->get_lien_topologie()->get_id();
1155  int nb=triangle->get_nb_fem_noeud();
1156  if (nb==3) f << ++i << " 2 2 1 " << idref << " " << triangle->get_fem_noeud(0)->get_numero() << " " << triangle->get_fem_noeud(1)->get_numero() << " " << triangle->get_fem_noeud(2)->get_numero() << std::endl;
1157  if (nb==6) f << ++i << " 9 2 1 " << idref << " " << triangle->get_fem_noeud(0)->get_numero() << " " << triangle->get_fem_noeud(2)->get_numero() << " " << triangle->get_fem_noeud(4)->get_numero() << " " << triangle->get_fem_noeud(1)->get_numero() << " " << triangle->get_fem_noeud(3)->get_numero() << " " << triangle->get_fem_noeud(5)->get_numero() << std::endl;
1158  if (nb==4) f << ++i << " 3 2 1 " << idref << " " << triangle->get_fem_noeud(0)->get_numero() << " " << triangle->get_fem_noeud(1)->get_numero() << " " << triangle->get_fem_noeud(2)->get_numero() << " " << triangle->get_fem_noeud(3)->get_numero() << std::endl;
1159  if (nb==8) f << ++i << " 16 2 1 " << idref << " " << triangle->get_fem_noeud(0)->get_numero() << " " << triangle->get_fem_noeud(2)->get_numero() << " " << triangle->get_fem_noeud(4)->get_numero() << " " << triangle->get_fem_noeud(6)->get_numero() << " " << triangle->get_fem_noeud(1)->get_numero() << " " << triangle->get_fem_noeud(3)->get_numero()<< " " << triangle->get_fem_noeud(5)->get_numero()<< " " << triangle->get_fem_noeud(7)->get_numero() << std::endl;
1160  triangle->change_numero(i);
1161  }
1162  LISTE_FEM_ELEMENT3::iterator ittetra;
1163  for (FEM_ELEMENT3* tetra=mai->get_premier_element3(ittetra);tetra;tetra=mai->get_suivant_element3(ittetra))
1164  {
1165  unsigned long idref=0;
1166  if (tetra->get_lien_topologie()!=NULL) idref=tetra->get_lien_topologie()->get_id();
1167  int nb=tetra->get_nb_fem_noeud();
1168  if (nb==4) f << ++i << " 4 3 1 " << idref << " " << tetra->get_etat(0) <<" " << tetra->get_fem_noeud(0)->get_numero() << " " << tetra->get_fem_noeud(1)->get_numero() << " " << tetra->get_fem_noeud(2)->get_numero() << " " << tetra->get_fem_noeud(3)->get_numero() << std::endl;
1169  if (nb==10) f << ++i << " 11 3 1 " << idref << " " << tetra->get_etat(0) <<" " << tetra->get_fem_noeud(0)->get_numero() << " " << tetra->get_fem_noeud(2)->get_numero() << " " << tetra->get_fem_noeud(4)->get_numero() << " " << tetra->get_fem_noeud(9)->get_numero() << " " << tetra->get_fem_noeud(1)->get_numero() << " " << tetra->get_fem_noeud(3)->get_numero() << " " << tetra->get_fem_noeud(5)->get_numero() << " " << tetra->get_fem_noeud(6)->get_numero() << " " << tetra->get_fem_noeud(8)->get_numero() << " " << tetra->get_fem_noeud(7)->get_numero() << std::endl;
1170  if (nb==8) f << ++i << " 5 3 1 " << idref << " " << tetra->get_etat(0) <<" " << tetra->get_fem_noeud(0)->get_numero() << " " << tetra->get_fem_noeud(1)->get_numero() << " " << tetra->get_fem_noeud(2)->get_numero() << " " << tetra->get_fem_noeud(3)->get_numero()<< " " << tetra->get_fem_noeud(4)->get_numero()<< " " << tetra->get_fem_noeud(5)->get_numero()<< " " << tetra->get_fem_noeud(6)->get_numero()<< " " << tetra->get_fem_noeud(7)->get_numero()<< std::endl;
1171  if (nb==20) f << ++i << " 17 3 1 " << idref << " " << tetra->get_etat(0) <<" " << tetra->get_fem_noeud(0)->get_numero() << " " << tetra->get_fem_noeud(2)->get_numero() << " " << tetra->get_fem_noeud(4)->get_numero() << " " << tetra->get_fem_noeud(6)->get_numero() << " " << tetra->get_fem_noeud(12)->get_numero() << " " << tetra->get_fem_noeud(14)->get_numero() << " " << tetra->get_fem_noeud(16)->get_numero() << " " << tetra->get_fem_noeud(18)->get_numero() << " " << tetra->get_fem_noeud(1)->get_numero() << " " << tetra->get_fem_noeud(7)->get_numero()<< " " << tetra->get_fem_noeud(8)->get_numero()<< " " << tetra->get_fem_noeud(3)->get_numero()<< " " << tetra->get_fem_noeud(9)->get_numero()<< " " << tetra->get_fem_noeud(5)->get_numero()<< " " << tetra->get_fem_noeud(10)->get_numero()<< " " << tetra->get_fem_noeud(11)->get_numero()<< " " << tetra->get_fem_noeud(13)->get_numero()<< " " << tetra->get_fem_noeud(19)->get_numero()<< " " << tetra->get_fem_noeud(15)->get_numero()<< " " << tetra->get_fem_noeud(
1172 17)->get_numero() << std::endl;
1173  tetra->change_numero(i);
1174  }
1175  f<<"$EndElements"<< std::endl;
1176 }
1177 
1178 void MG_EXPORT::gmsh41(std::ofstream &f,FEM_MAILLAGE* mai)
1179 {
1180 f << "$MeshFormat"<< std::endl;
1181  f << "4.1 0 " << sizeof(double) << std::endl;
1182  f << "$EndMeshFormat"<< std::endl;
1183  std::map<unsigned long,std::map<unsigned long,std::vector<FEM_ELEMENT_MAILLAGE*> > > entiteno;
1184  LISTE_FEM_NOEUD::iterator it;
1185  int i=0;
1186  for (FEM_NOEUD* noeud=mai->get_premier_noeud(it);noeud;noeud=mai->get_suivant_noeud(it))
1187  {
1188  unsigned long id=0;
1189  int dim=3;
1190 
1191  if (mai->get_nb_fem_element3()==0) dim=2;
1192  else if (mai->get_nb_fem_element2()==0) dim=1;
1193  else if (mai->get_nb_fem_element1()==0) dim=0;
1194 
1195  if (noeud->get_lien_topologie()!=NULL)
1196  {
1197  id=noeud->get_lien_topologie()->get_id();
1198  dim=noeud->get_lien_topologie()->get_dimension();
1199  }
1200  entiteno[dim][id].push_back(noeud);
1201  noeud->change_numero(i+1);
1202  i++;
1203  }
1204  int nbblocnoeud=0;
1205  for (std::map<unsigned long,std::map<unsigned long,std::vector<FEM_ELEMENT_MAILLAGE*> > >::iterator it=entiteno.begin();it!=entiteno.end();it++)
1206  nbblocnoeud=nbblocnoeud+it->second.size();
1207  int nbnoeud=mai->get_nb_fem_noeud();
1209  if (geo!=NULL) gmsh41entities(f,geo);
1210  f << "$Nodes"<< std::endl;
1211  f << nbblocnoeud << " " << nbnoeud << " 1 " << nbnoeud << std::endl;
1212  for (std::map<unsigned long,std::map<unsigned long,std::vector<FEM_ELEMENT_MAILLAGE*> > >::iterator it=entiteno.begin();it!=entiteno.end();it++)
1213  for (std::map<unsigned long,std::vector<FEM_ELEMENT_MAILLAGE*> > ::iterator it2=it->second.begin();it2!=it->second.end();it2++)
1214  {
1215  f << it->first << " " << it2->first << " 0 " << it2->second.size() << std::endl;
1216  for (int i=0;i<it2->second.size();i++)
1217  f << it2->second[i]->get_numero() << std::endl;
1218  for (int i=0;i<it2->second.size();i++)
1219  {
1220  FEM_NOEUD* no=(FEM_NOEUD*)it2->second[i];
1221  f << no->get_x()<< " " << no->get_y()<< " " << no->get_z() << std::endl;
1222  }
1223 
1224  }
1225  f<<"$EndNodes"<< std::endl;
1226  std::map<unsigned long,std::map<unsigned long,std::vector<FEM_ELEMENT_MAILLAGE*> > > entiteel;
1227  i=0;
1228  LISTE_FEM_ELEMENT0::iterator itelementnoeud;
1229  for (FEM_ELEMENT0* noeud=mai->get_premier_element0(itelementnoeud);noeud;noeud=mai->get_suivant_element0(itelementnoeud))
1230  {
1231  unsigned long id=0;
1232  if (noeud->get_lien_topologie()!=NULL) id=noeud->get_lien_topologie()->get_id();
1233  entiteel[15][id].push_back(noeud);
1234  i++;
1235  noeud->change_numero(i);
1236  }
1237  LISTE_FEM_ELEMENT1::iterator itsegment;
1238  for (FEM_ELEMENT1* segment=mai->get_premier_element1(itsegment);segment;segment=mai->get_suivant_element1(itsegment))
1239  {
1240  unsigned long id=0;
1241  if (segment->get_lien_topologie()!=NULL) id=segment->get_lien_topologie()->get_id();
1242  int nb=segment->get_nb_fem_noeud();
1243  if (nb==2) entiteel[1][id].push_back(segment);
1244  if (nb==3) entiteel[8][id].push_back(segment);
1245  i++;
1246  segment->change_numero(i);
1247  }
1248  LISTE_FEM_ELEMENT2::iterator ittriangle;
1249  for (FEM_ELEMENT2* triangle=mai->get_premier_element2(ittriangle);triangle;triangle=mai->get_suivant_element2(ittriangle))
1250  {
1251  unsigned long id=0;
1252  if (triangle->get_lien_topologie()!=NULL) id=triangle->get_lien_topologie()->get_id();
1253  int nb=triangle->get_nb_fem_noeud();
1254  if (nb==3) entiteel[2][id].push_back(triangle);
1255  if (nb==4) entiteel[3][id].push_back(triangle);
1256  if (nb==6) entiteel[9][id].push_back(triangle);
1257  if (nb==8) entiteel[16][id].push_back(triangle);
1258  i++;
1259  triangle->change_numero(i);
1260  }
1261  LISTE_FEM_ELEMENT3::iterator ittetra;
1262  for (FEM_ELEMENT3* tetra=mai->get_premier_element3(ittetra);tetra;tetra=mai->get_suivant_element3(ittetra))
1263  {
1264  unsigned long id=0;
1265  if (tetra->get_lien_topologie()!=NULL) id=tetra->get_lien_topologie()->get_id();
1266  int nb=tetra->get_nb_fem_noeud();
1267  if (nb==4) entiteel[4][id].push_back(tetra);
1268  if (nb==8) entiteel[5][id].push_back(tetra);
1269  if (nb==6) entiteel[6][id].push_back(tetra);
1270  if (nb==10) entiteel[11][id].push_back(tetra);
1271  if (nb==20) entiteel[17][id].push_back(tetra);
1272  if (nb==15) entiteel[18][id].push_back(tetra);
1273  i++;
1274  tetra->change_numero(i);
1275  }
1276  f<<"$Elements"<< std::endl;
1277  int nbbloc=0;
1278  for (std::map<unsigned long,std::map<unsigned long,std::vector<FEM_ELEMENT_MAILLAGE*> > >:: iterator itmap1=entiteel.begin();itmap1!=entiteel.end();itmap1++)
1279  nbbloc=nbbloc+itmap1->second.size();
1280  f << nbbloc << " " << i << " 1 " << i << std::endl;
1281  for (std::map<unsigned long,std::map<unsigned long,std::vector<FEM_ELEMENT_MAILLAGE*> > >:: iterator itmap1=entiteel.begin();itmap1!=entiteel.end();itmap1++)
1282  for (std::map<unsigned long,std::vector<FEM_ELEMENT_MAILLAGE*> > :: iterator itmap2=itmap1->second.begin();itmap2!=itmap1->second.end();itmap2++)
1283  {
1284  int dim;
1285  if (itmap1->first==15) dim=0;
1286  if (itmap1->first==1) dim=1;
1287  if (itmap1->first==8) dim=1;
1288  if (itmap1->first==2) dim=2;
1289  if (itmap1->first==3) dim=2;
1290  if (itmap1->first==9) dim=2;
1291  if (itmap1->first==16) dim=2;
1292  if (itmap1->first==4) dim=3;
1293  if (itmap1->first==5) dim=3;
1294  if (itmap1->first==6) dim=3;
1295  if (itmap1->first==11) dim=3;
1296  if (itmap1->first==17) dim=3;
1297  if (itmap1->first==18) dim=3;
1298  f << dim << " "<< itmap2->first << " " << itmap1->first << " " << itmap2->second.size() << std::endl;
1299  for (int i=0;i<itmap2->second.size();i++)
1300  {
1301  f << itmap2->second[i]->get_numero() << " " ;
1302  if (itmap1->first==15)
1303  {
1304  FEM_ELEMENT0* ele=(FEM_ELEMENT0*)itmap2->second[i];
1305  f << ele->get_fem_noeud(0)->get_numero();
1306  }
1307  if (itmap1->first==1)
1308  {
1309  FEM_ELEMENT1* ele=(FEM_ELEMENT1*)itmap2->second[i];
1310  f << ele->get_fem_noeud(0)->get_numero() << " ";
1311  f << ele->get_fem_noeud(1)->get_numero();
1312  }
1313  if (itmap1->first==8)
1314  {
1315  FEM_ELEMENT1* ele=(FEM_ELEMENT1*)itmap2->second[i];
1316  f << ele->get_fem_noeud(0)->get_numero() << " ";
1317  f << ele->get_fem_noeud(2)->get_numero() << " ";
1318  f << ele->get_fem_noeud(1)->get_numero();
1319  }
1320  if (itmap1->first==2)
1321  {
1322  FEM_ELEMENT2* ele=(FEM_ELEMENT2*)itmap2->second[i];
1323  f << ele->get_fem_noeud(0)->get_numero() << " ";
1324  f << ele->get_fem_noeud(1)->get_numero() << " ";
1325  f << ele->get_fem_noeud(2)->get_numero();
1326  }
1327  if (itmap1->first==3)
1328  {
1329  FEM_ELEMENT2* ele=(FEM_ELEMENT2*)itmap2->second[i];
1330  f << ele->get_fem_noeud(0)->get_numero() << " ";
1331  f << ele->get_fem_noeud(1)->get_numero() << " ";
1332  f << ele->get_fem_noeud(2)->get_numero()<< " ";
1333  f << ele->get_fem_noeud(3)->get_numero();
1334  }
1335  if (itmap1->first==9)
1336  {
1337  FEM_ELEMENT2* ele=(FEM_ELEMENT2*)itmap2->second[i];
1338  f << ele->get_fem_noeud(0)->get_numero() << " ";
1339  f << ele->get_fem_noeud(2)->get_numero() << " ";
1340  f << ele->get_fem_noeud(4)->get_numero() << " ";
1341  f << ele->get_fem_noeud(1)->get_numero() << " ";
1342  f << ele->get_fem_noeud(3)->get_numero() << " ";
1343  f << ele->get_fem_noeud(5)->get_numero();
1344  }
1345  if (itmap1->first==16)
1346  {
1347  FEM_ELEMENT2* ele=(FEM_ELEMENT2*)itmap2->second[i];
1348  f << ele->get_fem_noeud(0)->get_numero() << " ";
1349  f << ele->get_fem_noeud(2)->get_numero() << " ";
1350  f << ele->get_fem_noeud(4)->get_numero()<< " ";
1351  f << ele->get_fem_noeud(6)->get_numero() << " ";
1352  f << ele->get_fem_noeud(1)->get_numero() << " ";
1353  f << ele->get_fem_noeud(3)->get_numero() << " ";
1354  f << ele->get_fem_noeud(5)->get_numero()<< " ";
1355  f << ele->get_fem_noeud(7)->get_numero();
1356  }
1357  if (itmap1->first==4)
1358  {
1359  FEM_ELEMENT3* ele=(FEM_ELEMENT3*)itmap2->second[i];
1360  f << ele->get_fem_noeud(0)->get_numero() << " ";
1361  f << ele->get_fem_noeud(1)->get_numero() << " ";
1362  f << ele->get_fem_noeud(2)->get_numero()<< " ";
1363  f << ele->get_fem_noeud(3)->get_numero();
1364  }
1365  if (itmap1->first==5)
1366  {
1367  FEM_ELEMENT3* ele=(FEM_ELEMENT3*)itmap2->second[i];
1368  f << ele->get_fem_noeud(0)->get_numero() << " ";
1369  f << ele->get_fem_noeud(1)->get_numero() << " ";
1370  f << ele->get_fem_noeud(2)->get_numero()<< " ";
1371  f << ele->get_fem_noeud(3)->get_numero()<< " ";
1372  f << ele->get_fem_noeud(4)->get_numero()<< " ";
1373  f << ele->get_fem_noeud(5)->get_numero()<< " ";
1374  f << ele->get_fem_noeud(6)->get_numero()<< " ";
1375  f << ele->get_fem_noeud(7)->get_numero();
1376  }
1377  if (itmap1->first==6)
1378  {
1379  FEM_ELEMENT3* ele=(FEM_ELEMENT3*)itmap2->second[i];
1380  f << ele->get_fem_noeud(0)->get_numero() << " ";
1381  f << ele->get_fem_noeud(1)->get_numero() << " ";
1382  f << ele->get_fem_noeud(2)->get_numero()<< " ";
1383  f << ele->get_fem_noeud(3)->get_numero()<< " ";
1384  f << ele->get_fem_noeud(4)->get_numero()<< " ";
1385  f << ele->get_fem_noeud(5)->get_numero();
1386  }
1387  if (itmap1->first==11)
1388  {
1389  FEM_ELEMENT3* ele=(FEM_ELEMENT3*)itmap2->second[i];
1390  f << ele->get_fem_noeud(0)->get_numero() << " ";
1391  f << ele->get_fem_noeud(2)->get_numero() << " ";
1392  f << ele->get_fem_noeud(4)->get_numero()<< " ";
1393  f << ele->get_fem_noeud(9)->get_numero()<< " ";
1394  f << ele->get_fem_noeud(1)->get_numero()<< " ";
1395  f << ele->get_fem_noeud(3)->get_numero()<< " ";
1396  f << ele->get_fem_noeud(5)->get_numero()<< " ";
1397  f << ele->get_fem_noeud(6)->get_numero()<< " ";
1398  f << ele->get_fem_noeud(8)->get_numero()<< " ";
1399  f << ele->get_fem_noeud(7)->get_numero();
1400  }
1401  if (itmap1->first==17)
1402  {
1403  FEM_ELEMENT3* ele=(FEM_ELEMENT3*)itmap2->second[i];
1404  f << ele->get_fem_noeud(0)->get_numero() << " ";
1405  f << ele->get_fem_noeud(2)->get_numero() << " ";
1406  f << ele->get_fem_noeud(4)->get_numero()<< " ";
1407  f << ele->get_fem_noeud(6)->get_numero()<< " ";
1408  f << ele->get_fem_noeud(12)->get_numero()<< " ";
1409  f << ele->get_fem_noeud(14)->get_numero()<< " ";
1410  f << ele->get_fem_noeud(16)->get_numero()<< " ";
1411  f << ele->get_fem_noeud(18)->get_numero()<< " ";
1412  f << ele->get_fem_noeud(1)->get_numero()<< " ";
1413  f << ele->get_fem_noeud(7)->get_numero()<< " ";
1414  f << ele->get_fem_noeud(8)->get_numero()<< " ";
1415  f << ele->get_fem_noeud(3)->get_numero()<< " ";
1416  f << ele->get_fem_noeud(9)->get_numero()<< " ";
1417  f << ele->get_fem_noeud(5)->get_numero()<< " ";
1418  f << ele->get_fem_noeud(10)->get_numero()<< " ";
1419  f << ele->get_fem_noeud(11)->get_numero()<< " ";
1420  f << ele->get_fem_noeud(13)->get_numero()<< " ";
1421  f << ele->get_fem_noeud(19)->get_numero()<< " ";
1422  f << ele->get_fem_noeud(15)->get_numero()<< " ";
1423  f << ele->get_fem_noeud(17)->get_numero();
1424  }
1425 
1426 
1427  if (itmap1->first==18)
1428  {
1429  FEM_ELEMENT3* ele=(FEM_ELEMENT3*)itmap2->second[i];
1430  f << ele->get_fem_noeud(0)->get_numero() << " ";
1431  f << ele->get_fem_noeud(2)->get_numero() << " ";
1432  f << ele->get_fem_noeud(4)->get_numero()<< " ";
1433  f << ele->get_fem_noeud(9)->get_numero()<< " ";
1434  f << ele->get_fem_noeud(11)->get_numero()<< " ";
1435  f << ele->get_fem_noeud(13)->get_numero()<< " ";
1436  f << ele->get_fem_noeud(1)->get_numero()<< " ";
1437  f << ele->get_fem_noeud(5)->get_numero()<< " ";
1438  f << ele->get_fem_noeud(6)->get_numero()<< " ";
1439  f << ele->get_fem_noeud(3)->get_numero()<< " ";
1440  f << ele->get_fem_noeud(7)->get_numero()<< " ";
1441  f << ele->get_fem_noeud(8)->get_numero()<< " ";
1442  f << ele->get_fem_noeud(10)->get_numero()<< " ";
1443  f << ele->get_fem_noeud(14)->get_numero()<< " ";
1444  f << ele->get_fem_noeud(12)->get_numero();
1445  }
1446  f << std::endl;
1447  }
1448  }
1449 
1450  f<<"$EndElements"<< std::endl;
1451 }
1452 
1454 {
1455 char fichierparam[300];
1456 FILE *f=popen("gmsh -version 2>&1 | cut -b 1","r");
1457 double versioninstalle;
1458 fscanf(f,"%lf",&versioninstalle);
1459 sprintf(fichierparam,"%s/.magic",getenv("HOME"));
1460 OT_PARAMETRES param;
1461 param.ajouter("Version_gmsh",versioninstalle,OT_PARAMETRES::DOUBLE,"Version de gmsh utilisée");
1462 param.lire(fichierparam);
1463 param.enregistrer(fichierparam);
1464 double versiongmsh=param.get_valeur((char*)"Version_gmsh");
1465 return versiongmsh;
1466 }
1467 
1468 
1469 
1470 void MG_EXPORT::gmsh(FCT_TAILLE_FEM_SOLUTION* carte,std::string fichier)
1471 {
1472 FEM_MAILLAGE* mai=carte->get_maillage();
1473 std::ofstream f;
1474 std::string file=fichier+".msh";
1475  f.open(file.c_str(),std::ios::out);
1476  f.precision(16);
1477  f.setf(std::ios::showpoint);
1478  double versiongmsh=paramversiongmsh();
1479  if (versiongmsh<4.) gmsh2(f,carte);
1480  else gmsh41(f,carte->get_maillage());
1481 
1482 
1483 FEM_SOLUTION* sol=carte->get_solution();
1484 f <<"$NodeData"<< std::endl;
1485 f<<"1"<<std::endl;
1486 std::string nom=sol->get_nom()+ "_" + sol->get_legende(0);
1487 for (int k=0;k<nom.length();k++) if (nom[k]==' ') nom[k]='_';
1488 f<<"\""+nom+"\""<<std::endl;
1489 f<<"1"<<std::endl;
1490 f<<"0.0"<<std::endl;
1491 f<<"3"<<std::endl;
1492 f<<"0"<<std::endl;
1493 f<<sol->get_dim_solution()<<std::endl;
1494 f<<mai->get_nb_fem_noeud()<<std::endl;
1495 int k=0;
1496 LISTE_FEM_NOEUD::iterator itn;
1497 for (FEM_NOEUD* noeud=mai->get_premier_noeud(itn);noeud;noeud=mai->get_suivant_noeud(itn))
1498  {
1499  f<< noeud->get_numero();
1500  for (int coord=0;coord<sol->get_dim_solution();coord++)
1501  f << " " << sol->lire(k,0,coord);
1502  f << std::endl;
1503  k++;
1504  }
1505 f <<"$EndNodeData"<< std::endl;
1506 if (carte->get_isotrope())
1507  {
1508  f <<"$NodeData"<< std::endl;
1509  f<<"1"<<std::endl;
1510  std::string nom=sol->get_nom()+ "_ecart nodal";
1511  for (int k=0;k<nom.length();k++) if (nom[k]==' ') nom[k]='_';
1512  f<<"\""+nom+"\""<<std::endl;
1513  f<<"1"<<std::endl;
1514  f<<"0.0"<<std::endl;
1515  f<<"3"<<std::endl;
1516  f<<"0"<<std::endl;
1517  f<<"1"<<std::endl;
1518  f<<mai->get_nb_fem_noeud()<<std::endl;
1519  int k=0;
1520  LISTE_FEM_NOEUD::iterator itn;
1521  for (FEM_NOEUD* noeud=mai->get_premier_noeud(itn);noeud;noeud=mai->get_suivant_noeud(itn))
1522  {
1523  f<< noeud->get_numero();
1524  double val=sol->lire(k,0,0);
1525  f << " " << 1./sqrt(val);
1526  f << std::endl;
1527  k++;
1528  }
1529  f <<"$EndNodeData"<< std::endl;
1530  }
1531 else
1532  {
1533  for (int i=0;i<3;i++)
1534  {
1535  f <<"$NodeData"<< std::endl;
1536  f<<"1"<<std::endl;
1537  std::string nom;
1538  if (i==0) nom=sol->get_nom()+ "_ecart nodal_x";
1539  if (i==1) nom=sol->get_nom()+ "_ecart nodal_y";
1540  if (i==2) nom=sol->get_nom()+ "_ecart nodal_z";
1541  for (int k=0;k<nom.length();k++) if (nom[k]==' ') nom[k]='_';
1542  f<<"\""+nom+"\""<<std::endl;
1543  f<<"1"<<std::endl;
1544  f<<"0.0"<<std::endl;
1545  f<<"3"<<std::endl;
1546  f<<"0"<<std::endl;
1547  f<<"1"<<std::endl;
1548  f<<mai->get_nb_fem_noeud()<<std::endl;
1549  int k=0;
1550  LISTE_FEM_NOEUD::iterator itn;
1551  for (FEM_NOEUD* no=mai->get_premier_noeud(itn);no;no=mai->get_suivant_noeud(itn))
1552  {
1553  f<< no->get_numero();
1554  double metrique[9];
1555  metrique[0]=no->get_solution(0);
1556  metrique[1]=no->get_solution(1);
1557  metrique[2]=no->get_solution(2);
1558  metrique[3]=no->get_solution(3);
1559  metrique[4]=no->get_solution(4);
1560  metrique[5]=no->get_solution(5);
1561  metrique[6]=no->get_solution(6);
1562  metrique[7]=no->get_solution(7);
1563  metrique[8]=no->get_solution(8);
1564  double valeur_propre[3],vecteur_propre[9];
1565  carte->evaluer_decompose(metrique,valeur_propre,vecteur_propre);
1566  f << " " << 1./sqrt(valeur_propre[i]);
1567  f << std::endl;
1568  k++;
1569  }
1570  f <<"$EndNodeData"<< std::endl;
1571 
1572  }
1573  }
1574 f.close();
1575 }
1576 
1577 void MG_EXPORT::gmsh2(std::ofstream& f, FEM_MAILLAGE* mai)
1578 {
1579 f << "$MeshFormat"<< std::endl;
1580  f << "2 0 " << sizeof(double) << std::endl;
1581  f << "$EndMeshFormat"<< std::endl;
1582  f << "$Nodes"<< std::endl;
1583  int nbnoeud=mai->get_nb_fem_noeud();
1584  LISTE_FEM_NOEUD::iterator it;
1585  f << nbnoeud<< std::endl;
1586  int i=0;
1587  for (FEM_NOEUD* noeud=mai->get_premier_noeud(it);noeud;noeud=mai->get_suivant_noeud(it))
1588  {
1589  noeud->change_numero(i+1);
1590  double *coord=noeud->get_coord();
1591  f << noeud->get_numero() << " " << coord[0] << " " << coord[1] << " " << coord[2] << std::endl;
1592  i++;
1593  }
1594  f<<"$EndNodes"<< std::endl;
1595  f<<"$Elements"<< std::endl;
1597  f << nbelement << std::endl;
1598  i=0;
1599  LISTE_FEM_ELEMENT0::iterator itelementnoeud;
1600  for (FEM_ELEMENT0* noeud=mai->get_premier_element0(itelementnoeud);noeud;noeud=mai->get_suivant_element0(itelementnoeud))
1601  {
1602  unsigned long idref=0;
1603  if (noeud->get_lien_topologie()!=NULL) idref=noeud->get_lien_topologie()->get_id();
1604  f << ++i << " 15 2 1 " << idref << " " << noeud->get_fem_noeud(0)->get_numero() << std::endl;
1605  }
1606  LISTE_FEM_ELEMENT1::iterator itsegment;
1607  for (FEM_ELEMENT1* segment=mai->get_premier_element1(itsegment);segment;segment=mai->get_suivant_element1(itsegment))
1608  {
1609  unsigned long idref=0;
1610  if (segment->get_lien_topologie()!=NULL) idref=segment->get_lien_topologie()->get_id();
1611  if (mai->get_degre()==1) f << ++i << " 1 2 1 " << idref << " " << segment->get_fem_noeud(0)->get_numero() << " " << segment->get_fem_noeud(1)->get_numero() << std::endl;
1612  if (mai->get_degre()==2) f << ++i << " 8 2 1 " << idref << " " << segment->get_fem_noeud(0)->get_numero() << " " << segment->get_fem_noeud(2)->get_numero() << " " << segment->get_fem_noeud(1)->get_numero() << std::endl;
1613  segment->change_numero(i);
1614  }
1615  LISTE_FEM_ELEMENT2::iterator ittriangle;
1616  for (FEM_ELEMENT2* triangle=mai->get_premier_element2(ittriangle);triangle;triangle=mai->get_suivant_element2(ittriangle))
1617  {
1618  unsigned long idref=0;
1619  if (triangle->get_lien_topologie()!=NULL) idref=triangle->get_lien_topologie()->get_id();
1620  int nb=triangle->get_nb_fem_noeud();
1621  if (nb==3) f << ++i << " 2 2 1 " << idref << " " << triangle->get_fem_noeud(0)->get_numero() << " " << triangle->get_fem_noeud(1)->get_numero() << " " << triangle->get_fem_noeud(2)->get_numero() << std::endl;
1622  if (nb==6) f << ++i << " 9 2 1 " << idref << " " << triangle->get_fem_noeud(0)->get_numero() << " " << triangle->get_fem_noeud(2)->get_numero() << " " << triangle->get_fem_noeud(4)->get_numero() << " " << triangle->get_fem_noeud(1)->get_numero() << " " << triangle->get_fem_noeud(3)->get_numero() << " " << triangle->get_fem_noeud(5)->get_numero() << std::endl;
1623  if (nb==4) f << ++i << " 3 2 1 " << idref << " " << triangle->get_fem_noeud(0)->get_numero() << " " << triangle->get_fem_noeud(1)->get_numero() << " " << triangle->get_fem_noeud(2)->get_numero() << " " << triangle->get_fem_noeud(3)->get_numero() << std::endl;
1624  if (nb==8) f << ++i << " 16 2 1 " << idref << " " << triangle->get_fem_noeud(0)->get_numero() << " " << triangle->get_fem_noeud(2)->get_numero() << " " << triangle->get_fem_noeud(4)->get_numero() << " " << triangle->get_fem_noeud(6)->get_numero() << " " << triangle->get_fem_noeud(1)->get_numero() << " " << triangle->get_fem_noeud(3)->get_numero()<< " " << triangle->get_fem_noeud(5)->get_numero()<< " " << triangle->get_fem_noeud(7)->get_numero() << std::endl;
1625  triangle->change_numero(i);
1626  }
1627  LISTE_FEM_ELEMENT3::iterator ittetra;
1628  for (FEM_ELEMENT3* tetra=mai->get_premier_element3(ittetra);tetra;tetra=mai->get_suivant_element3(ittetra))
1629  {
1630  unsigned long idref=0;
1631  if (tetra->get_lien_topologie()!=NULL) idref=tetra->get_lien_topologie()->get_id();
1632  int nb=tetra->get_nb_fem_noeud();
1633  if (nb==4) f << ++i << " 4 3 1 " << idref << " " << tetra->get_etat(0) <<" " << tetra->get_fem_noeud(0)->get_numero() << " " << tetra->get_fem_noeud(1)->get_numero() << " " << tetra->get_fem_noeud(2)->get_numero() << " " << tetra->get_fem_noeud(3)->get_numero() << std::endl;
1634  if (nb==10) f << ++i << " 11 3 1 " << idref << " " << tetra->get_etat(0) <<" " << tetra->get_fem_noeud(0)->get_numero() << " " << tetra->get_fem_noeud(2)->get_numero() << " " << tetra->get_fem_noeud(4)->get_numero() << " " << tetra->get_fem_noeud(9)->get_numero() << " " << tetra->get_fem_noeud(1)->get_numero() << " " << tetra->get_fem_noeud(3)->get_numero() << " " << tetra->get_fem_noeud(5)->get_numero() << " " << tetra->get_fem_noeud(6)->get_numero() << " " << tetra->get_fem_noeud(8)->get_numero() << " " << tetra->get_fem_noeud(7)->get_numero() << std::endl;
1635  if (nb==8) f << ++i << " 5 3 1 " << idref << " " << tetra->get_etat(0) <<" " << tetra->get_fem_noeud(0)->get_numero() << " " << tetra->get_fem_noeud(1)->get_numero() << " " << tetra->get_fem_noeud(2)->get_numero() << " " << tetra->get_fem_noeud(3)->get_numero()<< " " << tetra->get_fem_noeud(4)->get_numero()<< " " << tetra->get_fem_noeud(5)->get_numero()<< " " << tetra->get_fem_noeud(6)->get_numero()<< " " << tetra->get_fem_noeud(7)->get_numero()<< std::endl;
1636  if (nb==20) f << ++i << " 17 3 1 " << idref << " " << tetra->get_etat(0) <<" " << tetra->get_fem_noeud(0)->get_numero() << " " << tetra->get_fem_noeud(2)->get_numero() << " " << tetra->get_fem_noeud(4)->get_numero() << " " << tetra->get_fem_noeud(6)->get_numero() << " " << tetra->get_fem_noeud(12)->get_numero() << " " << tetra->get_fem_noeud(14)->get_numero() << " " << tetra->get_fem_noeud(16)->get_numero() << " " << tetra->get_fem_noeud(18)->get_numero() << " " << tetra->get_fem_noeud(1)->get_numero() << " " << tetra->get_fem_noeud(7)->get_numero()<< " " << tetra->get_fem_noeud(8)->get_numero()<< " " << tetra->get_fem_noeud(3)->get_numero()<< " " << tetra->get_fem_noeud(9)->get_numero()<< " " << tetra->get_fem_noeud(5)->get_numero()<< " " << tetra->get_fem_noeud(10)->get_numero()<< " " << tetra->get_fem_noeud(11)->get_numero()<< " " << tetra->get_fem_noeud(13)->get_numero()<< " " << tetra->get_fem_noeud(19)->get_numero()<< " " << tetra->get_fem_noeud(15)->get_numero()<< " " << tetra->get_fem_noeud(
1637 17)->get_numero() << std::endl;
1638  if (nb==6) f << ++i << " 6 3 1 " << idref << " " << tetra->get_etat(0) <<" " << tetra->get_fem_noeud(0)->get_numero() << " " << tetra->get_fem_noeud(1)->get_numero() << " " << tetra->get_fem_noeud(2)->get_numero() << " " << tetra->get_fem_noeud(3)->get_numero()<< " " << tetra->get_fem_noeud(4)->get_numero()<< " " << tetra->get_fem_noeud(5)->get_numero()<< std::endl;
1639  if (nb==15) f << ++i << " 18 3 1 " << idref << " " << tetra->get_etat(0) <<" " << tetra->get_fem_noeud(0)->get_numero() << " " << tetra->get_fem_noeud(2)->get_numero() << " " << tetra->get_fem_noeud(4)->get_numero() << " " << tetra->get_fem_noeud(9)->get_numero() << " " << tetra->get_fem_noeud(11)->get_numero() << " " << tetra->get_fem_noeud(13)->get_numero() << " " << tetra->get_fem_noeud(1)->get_numero() << " " << tetra->get_fem_noeud(5)->get_numero() << " " << tetra->get_fem_noeud(6)->get_numero() << " " << tetra->get_fem_noeud(3)->get_numero()<< " " << tetra->get_fem_noeud(7)->get_numero()<< " " << tetra->get_fem_noeud(8)->get_numero()<< " " << tetra->get_fem_noeud(10)->get_numero()<< " " << tetra->get_fem_noeud(14)->get_numero()<< " " << tetra->get_fem_noeud(12)->get_numero()<< std::endl;
1640 
1641  tetra->change_numero(i);
1642  }
1643  LISTE_XFEM_ELEMENT0::iterator itxelementnoeud;
1644  for (XFEM_ELEMENT0* noeud=mai->get_premier_xelement0(itxelementnoeud);noeud;noeud=mai->get_suivant_xelement0(itxelementnoeud))
1645  {
1646  unsigned long idref=0;
1647  if (noeud->get_lien_topologie()!=NULL) idref=noeud->get_lien_topologie()->get_id();
1648  f << ++i << " 15 3 1 " << idref << " " << noeud->get_etat() << " " << noeud->get_fem_noeud(0)->get_numero() << std::endl;
1649  }
1650  LISTE_XFEM_ELEMENT1::iterator itxsegment;
1651  for (XFEM_ELEMENT1* segment=mai->get_premier_xelement1(itxsegment);segment;segment=mai->get_suivant_xelement1(itxsegment))
1652  {
1653  unsigned long idref=0;
1654  if (segment->get_lien_topologie()!=NULL) idref=segment->get_lien_topologie()->get_id();
1655  if (mai->get_degre()==1) f << ++i << " 1 3 1 " << idref << " " << segment->get_etat() << " " << segment->get_fem_noeud(0)->get_numero() << " " << segment->get_fem_noeud(1)->get_numero() << std::endl;
1656  if (mai->get_degre()==2) f << ++i << " 8 3 1 " << idref << " " << segment->get_etat() << " " << segment->get_fem_noeud(0)->get_numero() << " " << segment->get_fem_noeud(2)->get_numero() << " " << segment->get_fem_noeud(1)->get_numero() << std::endl;
1657  segment->change_numero(i);
1658  }
1659 
1660  LISTE_XFEM_ELEMENT2::iterator itxtriangle;
1661  for (XFEM_ELEMENT2* triangle=mai->get_premier_xelement2(itxtriangle);triangle;triangle=mai->get_suivant_xelement2(itxtriangle))
1662  {
1663  unsigned long idref=0;
1664  if (triangle->get_lien_topologie()!=NULL) idref=triangle->get_lien_topologie()->get_id();
1665  int nb=triangle->get_nb_fem_noeud();
1666  if (nb==3) f << ++i << " 2 3 1 " << idref << " " << triangle->get_etat() << " " << triangle->get_fem_noeud(0)->get_numero() << " " << triangle->get_fem_noeud(1)->get_numero() << " " << triangle->get_fem_noeud(2)->get_numero() << std::endl;
1667  if (nb==6) f << ++i << " 9 3 1 " << idref << " " << triangle->get_etat() << " " << triangle->get_fem_noeud(0)->get_numero() << " " << triangle->get_fem_noeud(2)->get_numero() << " " << triangle->get_fem_noeud(4)->get_numero() << " " << triangle->get_fem_noeud(1)->get_numero() << " " << triangle->get_fem_noeud(3)->get_numero() << " " << triangle->get_fem_noeud(5)->get_numero() << std::endl;
1668  if (nb==4) f << ++i << " 3 3 1 " << idref << " " << triangle->get_etat() << " " << triangle->get_fem_noeud(0)->get_numero() << " " << triangle->get_fem_noeud(1)->get_numero() << " " << triangle->get_fem_noeud(2)->get_numero() << " " << triangle->get_fem_noeud(3)->get_numero() << std::endl;
1669  if (nb==8) f << ++i << " 16 3 1 " << idref << " " << triangle->get_etat() << " " << triangle->get_fem_noeud(0)->get_numero() << " " << triangle->get_fem_noeud(2)->get_numero() << " " << triangle->get_fem_noeud(4)->get_numero() << " " << triangle->get_fem_noeud(6)->get_numero() << " " << triangle->get_fem_noeud(1)->get_numero() << " " << triangle->get_fem_noeud(3)->get_numero()<< " " << triangle->get_fem_noeud(5)->get_numero()<< " " << triangle->get_fem_noeud(7)->get_numero() << std::endl;
1670  triangle->change_numero(i);
1671  }
1672  LISTE_XFEM_ELEMENT3::iterator itxtetra;
1673  for (XFEM_ELEMENT3* xtetra=mai->get_premier_xelement3(itxtetra);xtetra;xtetra=mai->get_suivant_xelement3(itxtetra))
1674  {
1675  unsigned long idref=0;
1676  if (xtetra->get_lien_topologie()!=NULL) idref=xtetra->get_lien_topologie()->get_id();
1677  int nb=xtetra->get_nb_fem_noeud();
1678  if (nb==4) f << ++i << " 4 3 1 " << idref << " " << xtetra->get_etat() << " " << xtetra->get_fem_noeud(0)->get_numero() << " " << xtetra->get_fem_noeud(1)->get_numero() << " " << xtetra->get_fem_noeud(2)->get_numero() << " " << xtetra->get_fem_noeud(3)->get_numero() << std::endl;
1679  if (nb==10) f << ++i << " 11 3 1 " << idref << " " << xtetra->get_etat() << xtetra->get_fem_noeud(0)->get_numero() << " " << xtetra->get_fem_noeud(2)->get_numero() << " " << xtetra->get_fem_noeud(4)->get_numero() << " " << xtetra->get_fem_noeud(9)->get_numero() << " " << xtetra->get_fem_noeud(1)->get_numero() << " " << xtetra->get_fem_noeud(3)->get_numero() << " " << xtetra->get_fem_noeud(5)->get_numero() << " " << xtetra->get_fem_noeud(6)->get_numero() << " " << xtetra->get_fem_noeud(8)->get_numero() << " " << xtetra->get_fem_noeud(7)->get_numero() << std::endl;
1680  if (nb==8) f << ++i << " 5 3 1 " << idref << " " << xtetra->get_etat() << xtetra->get_fem_noeud(0)->get_numero() << " " << xtetra->get_fem_noeud(1)->get_numero() << " " << xtetra->get_fem_noeud(2)->get_numero() << " " << xtetra->get_fem_noeud(3)->get_numero()<< " " << xtetra->get_fem_noeud(4)->get_numero()<< " " << xtetra->get_fem_noeud(5)->get_numero()<< " " << xtetra->get_fem_noeud(6)->get_numero()<< " " << xtetra->get_fem_noeud(7)->get_numero()<< std::endl;
1681  if (nb==20) f << ++i << " 17 3 1 " << idref << " " << xtetra->get_etat() << xtetra->get_fem_noeud(0)->get_numero() << " " << xtetra->get_fem_noeud(2)->get_numero() << " " << xtetra->get_fem_noeud(4)->get_numero() << " " << xtetra->get_fem_noeud(6)->get_numero() << " " << xtetra->get_fem_noeud(12)->get_numero() << " " << xtetra->get_fem_noeud(14)->get_numero() << " " << xtetra->get_fem_noeud(16)->get_numero() << " " << xtetra->get_fem_noeud(18)->get_numero() << " " << xtetra->get_fem_noeud(1)->get_numero() << " " << xtetra->get_fem_noeud(7)->get_numero()<< " " << xtetra->get_fem_noeud(8)->get_numero()<< " " << xtetra->get_fem_noeud(3)->get_numero()<< " " << xtetra->get_fem_noeud(9)->get_numero()<< " " << xtetra->get_fem_noeud(5)->get_numero()<< " " << xtetra->get_fem_noeud(10)->get_numero()<< " " << xtetra->get_fem_noeud(11)->get_numero()<< " " << xtetra->get_fem_noeud(13)->get_numero()<< " " << xtetra->get_fem_noeud(19)->get_numero()<< " " << xtetra->get_fem_noeud(15)->get_numero()<< " "
1682  << xtetra->get_fem_noeud(17)->get_numero() << std::endl;
1683  xtetra->change_numero(i);
1684  }
1685 
1686 
1687  f<<"$EndElements"<< std::endl;
1688 
1689 }
1690 
1691 
1692 void MG_EXPORT::gmsh(class FEM_MAILLAGE* mai,std::string fichier)
1693 {
1694  std::ofstream f;
1695  std::string file=fichier+".msh";
1696  f.open(file.c_str(),std::ios::out);
1697  f.precision(16);
1698  f.setf(std::ios::showpoint);
1699 
1700  double versiongmsh=paramversiongmsh();
1701  if (versiongmsh<4.) gmsh2(f,mai);
1702  else gmsh41(f,mai);
1704  int nbsol=gest->get_nb_fem_solution();
1705  int ok=0;
1706  if (nbsol!=0)
1707  {
1708  for (int i=0;i<nbsol;i++)
1709  {
1710  FEM_SOLUTION* sol=gest->get_fem_solution(i);
1711  if (sol->get_maillage()==mai) ok=1;
1712  }
1713  }
1714  if (ok==1)
1715  {
1716  for (int i=0;i<nbsol;i++)
1717  {
1718  FEM_SOLUTION* sol=gest->get_fem_solution(i);
1719  if (sol->get_maillage()!=mai) continue;
1720  int nb_champs=sol->get_nb_champ();
1721  for (int j=0;j<nb_champs;j++)
1722  {
1723  int typesol=sol->get_entite_solution();
1724  //if ((typesol==MAGIC::ENTITE_SOLUTION::ENTITE_NOEUD)||(typesol==MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT1)||(typesol==MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT2)||(typesol==MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT3)) sol->active_solution(j);
1725  if (typesol==MAGIC::ENTITE_SOLUTION::ENTITE_NOEUD) f <<"$NodeData"<< std::endl;
1726  else if (typesol==MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT1) f <<"$ElementData"<< std::endl;
1727  else if (typesol==MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT2) f <<"$ElementData"<< std::endl;
1728  else if (typesol==MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT3) f <<"$ElementData"<< std::endl;
1729  else if (typesol==MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENTND) f <<"$ElementData"<< std::endl;
1730  else if (typesol==MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT3_GAUSS) f <<"$ElementData"<< std::endl;
1731  else if (typesol==MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT2_GAUSS) f <<"$ElementData"<< std::endl;
1732  else if (typesol==MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT1_GAUSS) f <<"$ElementData"<< std::endl;
1733  else if (typesol==MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT1_NOEUD) f <<"$ElementNodeData"<< std::endl;
1734  else if (typesol==MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT2_NOEUD) f <<"$ElementNodeData"<< std::endl;
1735  else if (typesol==MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT3_NOEUD) f <<"$ElementNodeData"<< std::endl;
1736  else if (typesol==MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENTND_NOEUD) f <<"$ElementNodeData"<< std::endl;
1737  f<<"1"<<std::endl;
1738  std::string nom=sol->get_nom()+ "_" + sol->get_legende(j);
1739  int timestep=0;
1740  bool avectimestep=false;
1741  for (int k=0;k<nom.length();k++)
1742  {
1743  if (nom[k]==' ') nom[k]='_';
1744  if (nom[k]=='%') {nom[k]=' ';avectimestep=true;}
1745  }
1746  if (avectimestep)
1747  {
1748  char message[500];
1749  sscanf(nom.c_str(),"%s %d",message,&timestep);
1750  nom=message;
1751  nom=nom+ "_" + sol->get_legende(j);
1752  }
1753  f<<"\""+nom+"\""<<std::endl;
1754  f<<"1"<<std::endl;
1755  f<<"0.0"<<std::endl;
1756  f<<"3"<<std::endl;
1757  f<<timestep<<std::endl;
1758  f<<sol->get_dim_solution()<<std::endl;
1760  {
1761  f<<mai->get_nb_fem_noeud()<<std::endl;
1762  int k=0;
1763  LISTE_FEM_NOEUD::iterator itn;
1764  for (FEM_NOEUD* noeud=mai->get_premier_noeud(itn);noeud;noeud=mai->get_suivant_noeud(itn))
1765  {
1766  f<< noeud->get_numero();
1767  for (int coord=0;coord<sol->get_dim_solution();coord++)
1768  f << " " << sol->lire(k,j,coord);
1769  f << std::endl;
1770  k++;
1771  }
1772  }
1774  {
1775  int nb1=mai->get_nb_fem_element3();
1776  f<<nb1<<std::endl;
1777  int k=0;
1778  LISTE_FEM_ELEMENT3::iterator ite;
1779  for (FEM_ELEMENT3* ele=mai->get_premier_element3(ite);ele;ele=mai->get_suivant_element3(ite))
1780  {
1781  f<<ele->get_numero();
1782  for (int coord=0;coord<sol->get_dim_solution();coord++)
1783  f<< " " << sol->lire(k,j,coord);
1784  f<< std::endl;
1785  k++;
1786  }
1787 
1788  }
1790  {
1791  int nb1=mai->get_nb_fem_element3();
1792  f<<nb1<<std::endl;
1793  int k=0;
1794  LISTE_FEM_ELEMENT3::iterator ite;
1795  for (FEM_ELEMENT3* ele=mai->get_premier_element3(ite);ele;ele=mai->get_suivant_element3(ite))
1796  {
1797  f<<ele->get_numero();
1798  int nbgauss=sol->get_nb_gauss(k);
1799  for (int coord=0;coord<sol->get_dim_solution();coord++)
1800  {
1801  double val=sol->get_moyenne_volumique_elementaire_champs(j,ele,k,coord);
1802  f<< " " << val;
1803  }
1804  f<< std::endl;
1805  k++;
1806  }
1807 
1808  }
1810  {
1811  int nb1=mai->get_nb_fem_element2();
1812  f<<nb1<<std::endl;
1813  int k=0;
1814  LISTE_FEM_ELEMENT2::iterator ite;
1815  for (FEM_ELEMENT2* ele=mai->get_premier_element2(ite);ele;ele=mai->get_suivant_element2(ite))
1816  {
1817  f<<ele->get_numero();
1818  int nbgauss=sol->get_nb_gauss(k);
1819  for (int coord=0;coord<sol->get_dim_solution();coord++)
1820  {
1821  double val=sol->get_moyenne_surfacique_elementaire_champs(j,ele,k,coord);
1822  f<< " " << val;
1823  }
1824  f<< std::endl;
1825  k++;
1826  }
1827 
1828  }
1830  {
1831  int nb1=mai->get_nb_fem_element1();
1832  f<<nb1<<std::endl;
1833  int k=0;
1834  LISTE_FEM_ELEMENT1::iterator ite;
1835  for (FEM_ELEMENT1* ele=mai->get_premier_element1(ite);ele;ele=mai->get_suivant_element1(ite))
1836  {
1837  f<<ele->get_numero();
1838  int nbgauss=sol->get_nb_gauss(k);
1839  if (nbgauss!=5) std::cout <<j <<" " << k << " " << nbgauss<<std::endl;
1840  for (int coord=0;coord<sol->get_dim_solution();coord++)
1841  {
1842  double val=sol->get_moyenne_lineique_elementaire_champs(j,ele,k,coord);
1843  f<< " " << val;
1844  }
1845  f<< std::endl;
1846  k++;
1847  }
1848 
1849  }
1851  {
1852  int nb2=mai->get_nb_fem_element2();
1853  f<<nb2<<std::endl;
1854  int k=0;
1855  LISTE_FEM_ELEMENT2::iterator ite;
1856  for (FEM_ELEMENT2* ele=mai->get_premier_element2(ite);ele;ele=mai->get_suivant_element2(ite))
1857  {
1858  f<<ele->get_numero();
1859  for (int coord=0;coord<sol->get_dim_solution();coord++)
1860  f<< " " << sol->lire(k,j,coord);
1861  f<< std::endl;
1862  k++;
1863  }
1864  }
1866  {
1867  int nb3=mai->get_nb_fem_element1();
1868  f<<nb3<<std::endl;
1869  int k=0;
1870  LISTE_FEM_ELEMENT1::iterator ite;
1871  for (FEM_ELEMENT1* ele=mai->get_premier_element1(ite);ele;ele=mai->get_suivant_element1(ite))
1872  {
1873  f<<ele->get_numero();
1874  for (int coord=0;coord<sol->get_dim_solution();coord++)
1875  f<< " " << sol->lire(k,j,coord);
1876  f<< std::endl;
1877  k++;
1878  }
1879  }
1881  {
1882  int nb3=mai->get_nb_fem_element1()+mai->get_nb_fem_element2()+mai->get_nb_fem_element3();
1883  f<<nb3<<std::endl;
1884  int k=0;
1885  LISTE_FEM_ELEMENT1::iterator ite;
1886  for (FEM_ELEMENT1* ele=mai->get_premier_element1(ite);ele;ele=mai->get_suivant_element1(ite))
1887  {
1888  f<<ele->get_numero();
1889  for (int coord=0;coord<sol->get_dim_solution();coord++)
1890  f<< " " << sol->lire(k,j,coord);
1891  f<< std::endl;
1892  k++;
1893  }
1894  LISTE_FEM_ELEMENT2::iterator ite2;
1895  for (FEM_ELEMENT2* ele=mai->get_premier_element2(ite2);ele;ele=mai->get_suivant_element2(ite2))
1896  {
1897  f<<ele->get_numero();
1898  for (int coord=0;coord<sol->get_dim_solution();coord++)
1899  f<< " " << sol->lire(k,j,coord);
1900  f<< std::endl;
1901  k++;
1902  }
1903  LISTE_FEM_ELEMENT3::iterator ite3;
1904  for (FEM_ELEMENT3* ele=mai->get_premier_element3(ite3);ele;ele=mai->get_suivant_element3(ite3))
1905  {
1906  f<<ele->get_numero();
1907  for (int coord=0;coord<sol->get_dim_solution();coord++)
1908  f<< " " << sol->lire(k,j,coord);
1909  f<< std::endl;
1910  k++;
1911  }
1912  }
1914  {
1915  int nb1=mai->get_nb_fem_element3();
1916  f<<nb1<<std::endl;
1917  LISTE_FEM_ELEMENT3::iterator ite;
1918  int k=0;
1919  for (FEM_ELEMENT3* ele=mai->get_premier_element3(ite);ele;ele=mai->get_suivant_element3(ite))
1920  {
1921  int num=ele->get_nb_fem_noeud();
1922  f<<ele->get_numero()<< " " << num <<" ";
1923  for (int l=0;l<num;l++)
1924  for (int coord=0;coord<sol->get_dim_solution();coord++)
1925  f << sol->lire(k,j,coord,l) << " ";
1926  f << std::endl;
1927  k++;
1928  }
1929  }
1931  {
1932  int nb1=mai->get_nb_fem_element2();
1933  f<<nb1<<std::endl;
1934  LISTE_FEM_ELEMENT2::iterator ite;
1935  int k=0;
1936  for (FEM_ELEMENT2* ele=mai->get_premier_element2(ite);ele;ele=mai->get_suivant_element2(ite))
1937  {
1938  int num=ele->get_nb_fem_noeud();
1939  f<<ele->get_numero()<< " " << num <<" ";
1940  for (int l=0;l<num;l++)
1941  for (int coord=0;coord<sol->get_dim_solution();coord++)
1942  f << sol->lire(k,j,coord,l) << " ";
1943  f << std::endl;
1944  k++;
1945  }
1946  }
1948  {
1949  int nb1=mai->get_nb_fem_element1();
1950  f<<nb1<<std::endl;
1951  LISTE_FEM_ELEMENT1::iterator ite;
1952  int k=0;
1953  for (FEM_ELEMENT1* ele=mai->get_premier_element1(ite);ele;ele=mai->get_suivant_element1(ite))
1954  {
1955  int num=ele->get_nb_fem_noeud();
1956  f<<ele->get_numero()<< " " << num <<" ";
1957  for (int l=0;l<num;l++)
1958  for (int coord=0;coord<sol->get_dim_solution();coord++)
1959  f << sol->lire(k,j,coord,l) << " ";
1960  f << std::endl;
1961  k++;
1962  }
1963  }
1965  {
1966  int nb1=mai->get_nb_fem_element1()+mai->get_nb_fem_element2()+mai->get_nb_fem_element3();
1967  f<<nb1<<std::endl;
1968  int k=0;
1969  LISTE_FEM_ELEMENT1::iterator ite;
1970  for (FEM_ELEMENT1* ele=mai->get_premier_element1(ite);ele;ele=mai->get_suivant_element1(ite))
1971  {
1972  int num=ele->get_nb_fem_noeud();
1973  f<<ele->get_numero()<< " " << num <<" ";
1974  for (int l=0;l<num;l++)
1975  for (int coord=0;coord<sol->get_dim_solution();coord++)
1976  f << sol->lire(k,j,coord,l) << " ";
1977  f << std::endl;
1978  k++;
1979  }
1980  LISTE_FEM_ELEMENT2::iterator ite2;
1981  for (FEM_ELEMENT2* ele=mai->get_premier_element2(ite2);ele;ele=mai->get_suivant_element2(ite2))
1982  {
1983  int num=ele->get_nb_fem_noeud();
1984  f<<ele->get_numero()<< " " << num <<" ";
1985  for (int l=0;l<num;l++)
1986  for (int coord=0;coord<sol->get_dim_solution();coord++)
1987  f << sol->lire(k,j,coord,l) << " ";
1988  f << std::endl;
1989  k++;
1990  }
1991  LISTE_FEM_ELEMENT3::iterator ite3;
1992  for (FEM_ELEMENT3* ele=mai->get_premier_element3(ite3);ele;ele=mai->get_suivant_element3(ite3))
1993  {
1994  int num=ele->get_nb_fem_noeud();
1995  f<<ele->get_numero()<< " " << num <<" ";
1996  for (int l=0;l<num;l++)
1997  for (int coord=0;coord<sol->get_dim_solution();coord++)
1998  f << sol->lire(k,j,coord,l) << " ";
1999  f << std::endl;
2000  k++;
2001  }
2002  }
2003 
2004  if (typesol==MAGIC::ENTITE_SOLUTION::ENTITE_NOEUD) f <<"$EndNodeData"<< std::endl;
2005  else if (typesol==MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT1) f <<"$EndElementData"<< std::endl;
2006  else if (typesol==MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT2) f <<"$EndElementData"<< std::endl;
2007  else if (typesol==MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT3) f <<"$EndElementData"<< std::endl;
2008  else if (typesol==MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENTND) f <<"$EndElementData"<< std::endl;
2009  else if (typesol==MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT1_NOEUD) f <<"$ElementEndNodeData"<< std::endl;
2010  else if (typesol==MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT2_NOEUD) f <<"$ElementEndNodeData"<< std::endl;
2011  else if (typesol==MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT3_NOEUD) f <<"$ElementEndNodeData"<< std::endl;
2012  else if (typesol==MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENTND_NOEUD) f <<"$ElementEndNodeData"<< std::endl;
2013 
2014  }
2015 
2016  }
2017  }
2018  LISTE_FEM_NOEUD::iterator it;
2019  if (mai->existe_deforme())
2020  {
2021  f<<"$NodeData"<< std::endl;
2022  f<<"1"<<std::endl;
2023  f<<"\"displacement (*"<< 1./mai->get_mg_maillage()->get_mg_geometrie()->get_valeur_unite() << ")\""<<std::endl;
2024  f<<"1"<<std::endl;
2025  f<<"0.0"<<std::endl;
2026  f<<"3"<<std::endl;
2027  f<<"0"<<std::endl;
2028  f<<"3"<<std::endl;
2029  f<<mai->get_nb_fem_noeud()<<std::endl;
2030  for (FEM_NOEUD* noeud=mai->get_premier_noeud(it);noeud;noeud=mai->get_suivant_noeud(it))
2031  f<< noeud->get_numero() << " " << noeud->get_dx() <<" " << noeud->get_dy() << " " << noeud->get_dz() << std::endl;
2032  f <<"$EndNodeData"<< std::endl;
2033  }
2034  if (mai->existe_reaction())
2035  {
2036  f<<"$NodeData"<< std::endl;
2037  f<<"1"<<std::endl;
2038  f<<"\"reaction\""<<std::endl;
2039  f<<"1"<<std::endl;
2040  f<<"0.0"<<std::endl;
2041  f<<"3"<<std::endl;
2042  f<<"0"<<std::endl;
2043  f<<"3"<<std::endl;
2044  f<<mai->get_nb_fem_noeud()<<std::endl;
2045  for (FEM_NOEUD* noeud=mai->get_premier_noeud(it);noeud;noeud=mai->get_suivant_noeud(it))
2046  f<< noeud->get_numero() << " " << noeud->get_rx() <<" " << noeud->get_ry() << " " << noeud->get_rz() << std::endl;
2047  f <<"$EndNodeData"<< std::endl;
2048  }
2049  f.close();
2050 }
2051 
2052 
2053 
2054 
2055 
2056 
2057 void MG_EXPORT::aster_ecrire_export(std::string fichier,int typeetude)
2058 {
2059  std::string fichierexport=fichier+".export";
2060  FILE *in=fopen(fichierexport.c_str(),"wt");
2061  char path[255];
2062  char *chaine = getcwd(path,255);
2063 
2064  char tpmax[500];
2065  char memjeveux[500];
2066  char version[500];
2067  double mem=param_aster.get_valeur((char*)"Memoire");
2068  sprintf(memjeveux,"%.1lf",mem);
2069  int tps=(int)param_aster.get_valeur((char*)"Temps_max");
2070  int maxbase=(int)param_aster.get_valeur((char*)"Max_base");
2071  int nbcpu=(int)param_aster.get_valeur((char*)"Nb_CPU");
2072  sprintf(tpmax,"%d",tps);
2073  sprintf(version,"%s",param_aster.get_nom("Version").c_str());
2074  fprintf(in,"P version %s\n",version);
2075  fprintf(in,"P mode interactif\n");
2076  fprintf(in,"A memjeveux %s\n",memjeveux);
2077  fprintf(in,"A tpmax %s\n",tpmax);
2078  fprintf(in,"P ncpus %d\n",nbcpu);
2079  fprintf(in,"A args -max_base %d\n",maxbase*1024);
2080  fprintf(in,"P actions make_etude\n");
2081  fprintf(in,"F comm %s/%s.comm D 1\n",chaine,fichier.c_str());
2082  fprintf(in,"F mail %s/%s.mail D 20\n",chaine,fichier.c_str());
2083  fprintf(in,"F mess %s/%s.mess R 6\n",chaine,fichier.c_str());
2085  fprintf(in,"F m %s/%s.m R 29\n",chaine,fichier.c_str());
2086  else fprintf(in,"F resu %s/%s.resu R 8\n",chaine,fichier.c_str());
2087  fclose(in);
2088  }
2089 
2090 
2091 
2092 
2093 
2094 void MG_EXPORT::aster_ecrire_mail(TPL_MAP_ENTITE<FEM_ELEMENT1*> &minipresent,int dim,TPL_LISTE_ENTITE<MG_COFACE*> *lstcoface,class FEM_MAILLAGE* mai,std::string fichier,int typeetude,int niveaumax,std::vector<FEM_ELEMENT3*> *lst,std::map<std::string,std::string> &listegroupedemaillexy,std::map<unsigned long,unsigned long> &gnexistant)
2095 {
2096  int base=(int)param_aster.get_valeur("Base_num_mail");
2097  MG_GEOMETRIE* geo=mai->get_mg_geometrie();
2098  int nbvol=geo->get_nb_mg_volume();
2099  int nbcoq=geo->get_nb_mg_coque();
2100  int nbpou=geo->get_nb_mg_poutre();
2101 
2102  //if (nbvol>0)
2103  //if ((nbcoq>0) || (nbpou>0))
2104  //recherche_connexion(mai,geo);
2105 
2106 
2107  OT_CHAINE ot;
2108  ot.ini_mg_fprintf(80,' ');
2109  std::string fichiermaillage=fichier+".mail";
2110  FILE* file_in=fopen(fichiermaillage.c_str(),"wt");
2111  char in[5000];
2112  sprintf(in, "TITRE\n" );ot.mg_fprintf(file_in,in);
2113  sprintf(in, " AUTEUR=MAGiC\n" );ot.mg_fprintf(file_in,in);
2114  sprintf(in, "FINSF\n" );ot.mg_fprintf(file_in,in);
2115  sprintf(in, "%%\n" );ot.mg_fprintf(file_in,in);
2116  if (dim==3) {sprintf(in, "COOR_3D NBOBJ=%d\n", mai->get_nb_fem_noeud());ot.mg_fprintf(file_in,in);}
2117  if (dim==2) {sprintf(in, "COOR_2D NBOBJ=%d\n", mai->get_nb_fem_noeud());ot.mg_fprintf(file_in,in);}
2118  if (dim==3) {sprintf(in, "%%FORMAT=(1*NOM_DE_NOEUD,3*COORD)\n" );ot.mg_fprintf(file_in,in);}
2119  if (dim==2) {sprintf(in, "%%FORMAT=(1*NOM_DE_NOEUD,2*COORD)\n" );ot.mg_fprintf(file_in,in);}
2120  double facteur_unite = mai->get_mg_geometrie()->get_valeur_unite();
2121  LISTE_FEM_NOEUD::iterator it;
2122  int i=0;
2123 
2124  bool numopt=false;
2125  FEM_NOEUD* noeud=mai->get_premier_noeud(it);
2126  if (noeud->get_numero_opt()!=-1) numopt=true;
2127 
2128  std::map<unsigned long,FEM_NOEUD*> listenoeud;
2129  for (FEM_NOEUD* noeud=mai->get_premier_noeud(it);noeud;noeud=mai->get_suivant_noeud(it))
2130  {
2131  unsigned long num=noeud->get_id();
2132  if (numopt) num=noeud->get_numero_opt();
2133  std::pair<unsigned long,FEM_NOEUD*> tmp(num,noeud);
2134  listenoeud.insert(tmp);
2135  i++;
2136  noeud->change_numero(i);
2137  }
2138 
2139  for (std::map<unsigned long,FEM_NOEUD*>::iterator it=listenoeud.begin();it!=listenoeud.end();it++)
2140  {
2141  FEM_NOEUD* noeud=(*it).second;
2142  double *coord=noeud->get_coord();
2143  if (dim==3) {sprintf(in, " N%s %18.11E %18.11E %18.11E\n",ot.get_base(noeud->get_numero(),base).c_str(),coord[0]*facteur_unite,coord[1]*facteur_unite,coord[2]*facteur_unite);ot.mg_fprintf(file_in,in);}
2144  if (dim==2) {sprintf(in, " N%s %18.11E %18.11E\n",ot.get_base(noeud->get_numero(),base).c_str(),coord[0]*facteur_unite,coord[1]*facteur_unite);ot.mg_fprintf(file_in,in);}
2145  //fprintf(in, " N%-9d% .14E% .14E% .14E\n",noeud->get_numero(),coord[0],coord[1],coord[2]);
2146  }
2147  {sprintf(in,"FINSF\n" );ot.mg_fprintf(file_in,in);}
2148  {sprintf(in, "%%\n" );ot.mg_fprintf(file_in,in);}
2149  int nbsegment=0;
2150  int nbtriangle=0;
2151  int nbquad=0;
2152  LISTE_FEM_ELEMENT1::iterator itsegment;
2153  for (FEM_ELEMENT1* segment=mai->get_premier_element1(itsegment);segment;segment=mai->get_suivant_element1(itsegment))
2154  nbsegment++;
2155  LISTE_FEM_ELEMENT2::iterator ittriangle;
2156  for (FEM_ELEMENT2* triangle=mai->get_premier_element2(ittriangle);triangle;triangle=mai->get_suivant_element2(ittriangle))
2157  if ((triangle->get_nb_fem_noeud()==3) || (triangle->get_nb_fem_noeud()==6)) nbtriangle++;
2158  LISTE_FEM_ELEMENT2::iterator itquad;
2159  for (FEM_ELEMENT2* quad=mai->get_premier_element2(itquad);quad;quad=mai->get_suivant_element2(itquad))
2160  if ((quad->get_nb_fem_noeud()==4) || (quad->get_nb_fem_noeud()==8)) nbquad++;
2161  i=1;
2162  if (nbsegment>0)
2163  {
2164  if (mai->get_degre()==1) {sprintf(in, "SEG2 NOM=INDEFINI NBOBJ=%d\n",nbsegment);ot.mg_fprintf(file_in,in);}
2165  if (mai->get_degre()==2) {sprintf(in, "SEG3 NOM=INDEFINI NBOBJ=%d\n",nbsegment);ot.mg_fprintf(file_in,in);}
2166  LISTE_FEM_ELEMENT1::iterator itsegment;
2167  for (FEM_ELEMENT1* segment=mai->get_premier_element1(itsegment);segment;segment=mai->get_suivant_element1(itsegment))
2168  {
2169  segment->change_numero(i);
2170  if (segment->est_un_mini_element1()==true) minipresent.ajouter(segment);
2171  if (mai->get_degre()==1) {sprintf(in, " M%s N%s N%s\n" ,ot.get_base(i,base).c_str(),ot.get_base(segment->get_fem_noeud(0)->get_numero(),base).c_str(),ot.get_base(segment->get_fem_noeud(1)->get_numero(),base).c_str());ot.mg_fprintf(file_in,in);}
2172  if (mai->get_degre()==2) {sprintf(in, " M%s N%s N%s N%s\n" ,ot.get_base(i,base).c_str(),ot.get_base(segment->get_fem_noeud(0)->get_numero(),base).c_str(),ot.get_base(segment->get_fem_noeud(2)->get_numero(),base).c_str(),ot.get_base(segment->get_fem_noeud(1)->get_numero(),base).c_str());ot.mg_fprintf(file_in,in);}
2173  i++;
2174  }
2175  {sprintf(in,"FINSF\n" );ot.mg_fprintf(file_in,in);}
2176  {sprintf(in, "%%\n" );ot.mg_fprintf(file_in,in);}
2177  }
2178  if (nbtriangle>0)
2179  {
2180  if (mai->get_degre()==1) {sprintf(in, "TRIA3 NOM=INDEFINI NBOBJ=%d\n",nbtriangle);ot.mg_fprintf(file_in,in);}
2181  if (mai->get_degre()==2) {sprintf(in, "TRIA6 NOM=INDEFINI NBOBJ=%d\n",nbtriangle);ot.mg_fprintf(file_in,in);}
2182  LISTE_FEM_ELEMENT2::iterator ittriangle;
2183  for (FEM_ELEMENT2* triangle=mai->get_premier_element2(ittriangle);triangle;triangle=mai->get_suivant_element2(ittriangle))
2184  {
2185  if ((triangle->get_nb_fem_noeud()!=3) && (triangle->get_nb_fem_noeud()!=6)) continue;
2186  triangle->change_numero(i);
2187  int nbcoface=((MG_FACE*)(triangle->get_lien_topologie()))->get_nb_mg_coface();
2188  MG_COFACE *cof=NULL;
2189  int icof=0;
2190  bool multicoface=false;
2191  while (icof<nbcoface)
2192  {
2193  MG_COFACE* coftmp=((MG_FACE*)(triangle->get_lien_topologie()))->get_mg_coface(icof);
2194  if (lstcoface->est_dans_la_liste(coftmp))
2195  if (cof==NULL) cof=coftmp; else multicoface=true;
2196  icof++;
2197  }
2198  int signe=-1;
2199  if (cof!=NULL) signe=cof->get_orientation();
2200  if (multicoface) signe=1;
2201  if (signe==1)
2202  {
2203  if (mai->get_degre()==1) {sprintf(in, " M%s N%s N%s N%s\n" ,ot.get_base(i,base).c_str(),ot.get_base(triangle->get_fem_noeud(0)->get_numero(),base).c_str(),ot.get_base(triangle->get_fem_noeud(2)->get_numero(),base).c_str(),ot.get_base(triangle->get_fem_noeud(1)->get_numero(),base).c_str());ot.mg_fprintf(file_in,in);}
2204  if (mai->get_degre()==2) {sprintf(in, " M%s N%s N%s N%s N%s N%s N%s\n" ,ot.get_base(i,base).c_str(),ot.get_base(triangle->get_fem_noeud(0)->get_numero(),base).c_str(),ot.get_base(triangle->get_fem_noeud(4)->get_numero(),base).c_str(),ot.get_base(triangle->get_fem_noeud(2)->get_numero(),base).c_str(),ot.get_base(triangle->get_fem_noeud(5)->get_numero(),base).c_str(),ot.get_base(triangle->get_fem_noeud(3)->get_numero(),base).c_str(),ot.get_base(triangle->get_fem_noeud(1)->get_numero(),base).c_str());ot.mg_fprintf(file_in,in);}
2205  i++;
2206  }
2207  else
2208  {
2209  if (mai->get_degre()==1) {sprintf(in, " M%s N%s N%s N%s\n" ,ot.get_base(i,base).c_str(),ot.get_base(triangle->get_fem_noeud(0)->get_numero(),base).c_str(),ot.get_base(triangle->get_fem_noeud(1)->get_numero(),base).c_str(),ot.get_base(triangle->get_fem_noeud(2)->get_numero(),base).c_str());ot.mg_fprintf(file_in,in);}
2210  if (mai->get_degre()==2) {sprintf(in, " M%s N%s N%s N%s N%s N%s N%s\n" ,ot.get_base(i,base).c_str(),ot.get_base(triangle->get_fem_noeud(0)->get_numero(),base).c_str(),ot.get_base(triangle->get_fem_noeud(2)->get_numero(),base).c_str(),ot.get_base(triangle->get_fem_noeud(4)->get_numero(),base).c_str(),ot.get_base(triangle->get_fem_noeud(1)->get_numero(),base).c_str(),ot.get_base(triangle->get_fem_noeud(3)->get_numero(),base).c_str(),ot.get_base(triangle->get_fem_noeud(5)->get_numero(),base).c_str());ot.mg_fprintf(file_in,in);}
2211  i++;
2212  }
2213 
2214  }
2215  {sprintf(in,"FINSF\n" );ot.mg_fprintf(file_in,in);}
2216  {sprintf(in, "%%\n" );ot.mg_fprintf(file_in,in);}
2217  }
2218  if (nbquad>0)
2219  {
2220  if (mai->get_degre()==1) {sprintf(in, "QUAD4 NOM=INDEFINI NBOBJ=%d\n",nbquad);ot.mg_fprintf(file_in,in);}
2221  if (mai->get_degre()==2) {sprintf(in, "QUAD8 NOM=INDEFINI NBOBJ=%d\n",nbquad);ot.mg_fprintf(file_in,in);}
2222  LISTE_FEM_ELEMENT2::iterator itquad;
2223  for (FEM_ELEMENT2* quad=mai->get_premier_element2(itquad);quad;quad=mai->get_suivant_element2(itquad))
2224  {
2225  if ((quad->get_nb_fem_noeud()!=4) && (quad->get_nb_fem_noeud()!=8)) continue;
2226  quad->change_numero(i);
2227  int nbcoface=((MG_FACE*)(quad->get_lien_topologie()))->get_nb_mg_coface();
2228  MG_COFACE *cof=NULL;
2229  int icof=0;
2230  bool multicoface;
2231  while (icof<nbcoface)
2232  {
2233  MG_COFACE* coftmp=((MG_FACE*)(quad->get_lien_topologie()))->get_mg_coface(icof);
2234  if (lstcoface->est_dans_la_liste(coftmp))
2235  if (cof==NULL) cof=coftmp; else multicoface=true;
2236  icof++;
2237  }
2238  int signe=-1;
2239  if (cof!=NULL) signe=cof->get_orientation();
2240  if (signe==1)
2241  {
2242  if (mai->get_degre()==1) {sprintf(in, " M%s N%s N%s N%s N%s\n" ,ot.get_base(i,base).c_str(),ot.get_base(quad->get_fem_noeud(0)->get_numero(),base).c_str(),ot.get_base(quad->get_fem_noeud(3)->get_numero(),base).c_str(),ot.get_base(quad->get_fem_noeud(2)->get_numero(),base).c_str(),ot.get_base(quad->get_fem_noeud(1)->get_numero(),base).c_str());ot.mg_fprintf(file_in,in);}
2243  if (mai->get_degre()==2) {sprintf(in, " M%s N%s N%s N%s N%s N%s N%s N%s N%s\n" ,ot.get_base(i,base).c_str(),ot.get_base(quad->get_fem_noeud(0)->get_numero(),base).c_str(),ot.get_base(quad->get_fem_noeud(6)->get_numero(),base).c_str(),ot.get_base(quad->get_fem_noeud(4)->get_numero(),base).c_str(),ot.get_base(quad->get_fem_noeud(2)->get_numero(),base).c_str(),ot.get_base(quad->get_fem_noeud(7)->get_numero(),base).c_str(),ot.get_base(quad->get_fem_noeud(5)->get_numero(),base).c_str(),ot.get_base(quad->get_fem_noeud(3)->get_numero(),base).c_str(),ot.get_base(quad->get_fem_noeud(1)->get_numero(),base).c_str());ot.mg_fprintf(file_in,in);}
2244  i++;
2245  }
2246  else
2247  {
2248  if (mai->get_degre()==1) {sprintf(in, " M%s N%s N%s N%s N%s\n" ,ot.get_base(i,base).c_str(),ot.get_base(quad->get_fem_noeud(0)->get_numero(),base).c_str(),ot.get_base(quad->get_fem_noeud(1)->get_numero(),base).c_str(),ot.get_base(quad->get_fem_noeud(2)->get_numero(),base).c_str(),ot.get_base(quad->get_fem_noeud(3)->get_numero(),base).c_str());ot.mg_fprintf(file_in,in);}
2249  if (mai->get_degre()==2) {sprintf(in, " M%s N%s N%s N%s N%s N%s N%s N%s N%s\n" ,ot.get_base(i,base).c_str(),ot.get_base(quad->get_fem_noeud(0)->get_numero(),base).c_str(),ot.get_base(quad->get_fem_noeud(2)->get_numero(),base).c_str(),ot.get_base(quad->get_fem_noeud(4)->get_numero(),base).c_str(),ot.get_base(quad->get_fem_noeud(6)->get_numero(),base).c_str(),ot.get_base(quad->get_fem_noeud(1)->get_numero(),base).c_str(),ot.get_base(quad->get_fem_noeud(3)->get_numero(),base).c_str(),ot.get_base(quad->get_fem_noeud(5)->get_numero(),base).c_str(),ot.get_base(quad->get_fem_noeud(7)->get_numero(),base).c_str());ot.mg_fprintf(file_in,in);}
2250  i++;
2251  }
2252 
2253  }
2254  {sprintf(in,"FINSF\n" );ot.mg_fprintf(file_in,in);}
2255  {sprintf(in, "%%\n" );ot.mg_fprintf(file_in,in);}
2256  }
2257  if (nbvol!=0) // Éléments volumiques
2258  {
2259  if (mai->get_mg_maillage()->get_nb_mg_tetra()>0)
2260  {
2261  if (mai->get_degre()==1) {sprintf(in, "TETRA4 NOM=INDEFINI NBOBJ=%d\n",mai->get_mg_maillage()->get_nb_mg_tetra());ot.mg_fprintf(file_in,in);}
2262  if (mai->get_degre()==2) {sprintf(in, "TETRA10 NOM=INDEFINI NBOBJ=%d\n",mai->get_mg_maillage()->get_nb_mg_tetra());ot.mg_fprintf(file_in,in);}
2263  LISTE_FEM_ELEMENT3::iterator ittetra;
2264  for (FEM_ELEMENT3* tet=mai->get_premier_element3(ittetra);tet;tet=mai->get_suivant_element3(ittetra))
2265  if ((tet->get_nb_fem_noeud()==4) || ((tet->get_nb_fem_noeud()==10)))
2266  {
2267  tet->change_numero(i);
2268  if (mai->get_degre()==1) {sprintf(in, " M%s N%s N%s N%s N%s\n" ,ot.get_base(i,base).c_str(),ot.get_base(tet->get_fem_noeud(0)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(1)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(2)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(3)->get_numero(),base).c_str());ot.mg_fprintf(file_in,in);}
2269  if (mai->get_degre()==2) {sprintf(in, " M%s N%s N%s N%s N%s N%s N%s N%s N%s N%s N%s\n" ,ot.get_base(i,base).c_str(),ot.get_base(tet->get_fem_noeud(0)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(2)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(4)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(9)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(1)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(3)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(5)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(6)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(7)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(8)->get_numero(),base).c_str());ot.mg_fprintf(file_in,in);}
2270  i++;
2271  }
2272  {sprintf(in,"FINSF\n" );ot.mg_fprintf(file_in,in);}
2273  {sprintf(in, "%%\n" );ot.mg_fprintf(file_in,in);}
2274  }
2275  if (mai->get_mg_maillage()->get_nb_mg_hexa()>0)
2276  {
2277  if (mai->get_degre()==1) {sprintf(in, "HEXA8 NOM=INDEFINI NBOBJ=%d\n",mai->get_mg_maillage()->get_nb_mg_hexa());ot.mg_fprintf(file_in,in);}
2278  if (mai->get_degre()==2) {sprintf(in, "HEXA20 NOM=INDEFINI NBOBJ=%d\n",mai->get_mg_maillage()->get_nb_mg_hexa());ot.mg_fprintf(file_in,in);}
2279  LISTE_FEM_ELEMENT3::iterator ittetra;
2280  for (FEM_ELEMENT3* tet=mai->get_premier_element3(ittetra);tet;tet=mai->get_suivant_element3(ittetra))
2281  if ((tet->get_nb_fem_noeud()==8) || ((tet->get_nb_fem_noeud()==20)))
2282  {
2283  tet->change_numero(i);
2284  if (mai->get_degre()==1) {sprintf(in, " M%s N%s N%s N%s N%s N%s N%s N%s N%s\n" ,ot.get_base(i,base).c_str(),ot.get_base(tet->get_fem_noeud(0)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(1)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(2)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(3)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(4)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(5)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(6)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(7)->get_numero(),base).c_str());ot.mg_fprintf(file_in,in);}
2285  if (mai->get_degre()==2) {sprintf(in, " M%s N%s N%s N%s N%s N%s N%s N%s N%s N%s N%s N%s N%s N%s N%s N%s N%s N%s N%s N%s N%s\n" ,ot.get_base(i,base).c_str(),ot.get_base(tet->get_fem_noeud(0)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(2)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(4)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(6)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(12)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(14)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(16)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(18)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(1)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(3)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(5)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(7)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(8)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(9)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(10)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(11)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(13)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(15)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(17)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(19)->get_numero(),base).c_str());ot.mg_fprintf(file_in,in);}
2286  i++;
2287  }
2288  {sprintf(in,"FINSF\n" );ot.mg_fprintf(file_in,in);}
2289  {sprintf(in, "%%\n" );ot.mg_fprintf(file_in,in);}
2290  }
2291  if (mai->get_mg_maillage()->get_nb_mg_penta()>0)
2292  {
2293  if (mai->get_degre()==1) {sprintf(in, "PENTA6 NOM=INDEFINI NBOBJ=%d\n",mai->get_mg_maillage()->get_nb_mg_penta());ot.mg_fprintf(file_in,in);}
2294  if (mai->get_degre()==2) {sprintf(in, "PENTA15 NOM=INDEFINI NBOBJ=%d\n",mai->get_mg_maillage()->get_nb_mg_penta());ot.mg_fprintf(file_in,in);}
2295  LISTE_FEM_ELEMENT3::iterator ittetra;
2296  for (FEM_ELEMENT3* tet=mai->get_premier_element3(ittetra);tet;tet=mai->get_suivant_element3(ittetra))
2297  if ((tet->get_nb_fem_noeud()==6) || ((tet->get_nb_fem_noeud()==15)))
2298  {
2299  tet->change_numero(i);
2300  if (mai->get_degre()==1) {sprintf(in, " M%s N%s N%s N%s N%s N%s N%s \n" ,ot.get_base(i,base).c_str(),ot.get_base(tet->get_fem_noeud(0)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(1)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(2)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(3)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(4)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(5)->get_numero(),base).c_str());ot.mg_fprintf(file_in,in);}
2301  if (mai->get_degre()==2) {sprintf(in, " M%s N%s N%s N%s N%s N%s N%s N%s N%s N%s N%s N%s N%s N%s N%s N%s\n" ,ot.get_base(i,base).c_str(),ot.get_base(tet->get_fem_noeud(0)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(2)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(4)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(9)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(11)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(13)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(1)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(3)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(5)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(6)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(7)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(8)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(10)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(12)->get_numero(),base).c_str(),ot.get_base(tet->get_fem_noeud(14)->get_numero(),base).c_str());ot.mg_fprintf(file_in,in);}
2302  i++;
2303  }
2304  {sprintf(in,"FINSF\n" );ot.mg_fprintf(file_in,in);}
2305  {sprintf(in, "%%\n" );ot.mg_fprintf(file_in,in);}
2306  }
2307  }
2308 
2309  // Groupes de noeuds
2310  LISTE_MG_SOMMET::iterator itsom;
2311  for (MG_SOMMET* som=geo->get_premier_sommet(itsom);som;som=geo->get_suivant_sommet(itsom))
2312  {
2313  if ((som->est_une_topo_element()) && (!geo->est_virtuelle()))
2314  {
2315  MG_SOMMET_NOEUD* somno=(MG_SOMMET_NOEUD*)som;
2316  MG_NOEUD* no=somno->get_mg_noeud();
2317  if (no->get_lien_topologie()==somno) continue;
2318  {sprintf(in, "GROUP_NO NOM=GNN%d \n ",somno->get_num_interne());ot.mg_fprintf(file_in,in);}
2319  FEM_NOEUD *femno;
2320  LISTE_FEM_NOEUD::iterator it;
2321  for (FEM_NOEUD *notmp=mai->get_premier_noeud(it);notmp!=NULL;notmp=mai->get_suivant_noeud(it))
2322  if (notmp->get_mg_element_maillage()==no) {femno=notmp;break;}
2323  {sprintf(in," N%s\n",ot.get_base(femno->get_numero(),base).c_str());ot.mg_fprintf(file_in,in);}
2324  {sprintf(in,"FINSF\n" );ot.mg_fprintf(file_in,in);}
2325  {sprintf(in, "%%\n" );ot.mg_fprintf(file_in,in);}
2326  }
2327 
2328  }
2329  std::multimap<unsigned long,FEM_NOEUD*,std::less<unsigned long> > noeudclasse;
2330  LISTE_FEM_NOEUD::iterator itn;
2331  for (FEM_NOEUD *no=mai->get_premier_noeud(itn);no!=NULL;no=mai->get_suivant_noeud(itn))
2332  {
2333  if (no->get_lien_topologie()==NULL) continue;
2334  std::pair<unsigned long,FEM_NOEUD*> tmp(no->get_lien_topologie()->get_id(),no);
2335  noeudclasse.insert(tmp);
2336  }
2337  unsigned long old_id=0;
2338  int nbelementreel=0;
2339  int first=0;
2340  for (std::multimap<unsigned long,FEM_NOEUD*,std::less<unsigned long> >::iterator noeudclasseit=noeudclasse.begin();noeudclasseit!=noeudclasse.end();noeudclasseit++)
2341  {
2342  unsigned long id=(*noeudclasseit).first;
2343  FEM_NOEUD* no=(*noeudclasseit).second;
2344  if ((no->get_lien_topologie()->get_dimension()!=0) && (geo->est_virtuelle())) continue;
2345  if (id!=old_id)
2346  {
2347  if (first)
2348  {
2349  if ((nbelementreel%8)!=0) {sprintf(in,"\n");ot.mg_fprintf(file_in,in);}
2350  {sprintf(in,"FINSF\n" );ot.mg_fprintf(file_in,in);}
2351  {sprintf(in, "%%\n" );ot.mg_fprintf(file_in,in);}
2352  }
2353  char c;
2354  if (no->get_lien_topologie()->get_dimension()==0) c='S';
2355  if (no->get_lien_topologie()->get_dimension()==1) c='A';
2356  if (no->get_lien_topologie()->get_dimension()==2) c='F';
2357  if (no->get_lien_topologie()->get_dimension()==3) c='V';
2358  {sprintf(in, "GROUP_NO NOM=GN%c%lu \n ",c,id);ot.mg_fprintf(file_in,in);}
2359  std::pair<unsigned long,unsigned long> tmp(id,id);
2360  gnexistant.insert(tmp);
2361  nbelementreel=0;
2362  first=1;
2363  old_id=id;
2364  }
2365  nbelementreel++;
2366  {sprintf(in," N%s",ot.get_base(no->get_numero(),base).c_str());ot.mg_fprintf(file_in,in);}
2367  if ((nbelementreel%8)==0) {sprintf(in,"\n ");ot.mg_fprintf(file_in,in);}
2368  }
2369  if ((nbelementreel%8)!=0) {sprintf(in,"\n");ot.mg_fprintf(file_in,in);}
2370  {sprintf(in,"FINSF\n" );ot.mg_fprintf(file_in,in);}
2371  {sprintf(in, "%%\n" );ot.mg_fprintf(file_in,in);}
2372 
2373 
2374 
2375 
2376  if (geo->est_virtuelle())
2377  {
2378  LISTE_MG_ARETE::iterator itare;
2379  for (MG_ARETE* are=geo->get_premier_arete(itare);are;are=geo->get_suivant_arete(itare))
2380  {
2381  TPL_MAP_ENTITE<MG_NOEUD*> lstnoeud;
2382  if (are->est_une_topo_element())
2383  {
2384  MG_ARETE_ELEMENT* areele=(MG_ARETE_ELEMENT*)are;
2385  int nbele=areele->get_nb_element();
2386  for (int i=0;i<nbele;i++)
2387  {
2388  MG_SEGMENT* seg=(MG_SEGMENT*)areele->get_lien_maillage()->get(i);
2389  if ((seg->get_noeud1()->get_lien_topologie()==NULL) || (seg->get_noeud1()->get_lien_topologie()==seg->get_lien_topologie())) lstnoeud.ajouter(seg->get_noeud1());
2390  if ((seg->get_noeud2()->get_lien_topologie()==NULL) || (seg->get_noeud2()->get_lien_topologie()==seg->get_lien_topologie())) lstnoeud.ajouter(seg->get_noeud2());
2391  }
2392 
2393  }
2394 
2395  if (lstnoeud.get_nb()>0)
2396  {
2397  int nbelementreel=0;
2398  {sprintf(in, "GROUP_NO NOM=GNA%lu \n ",are->get_id());ot.mg_fprintf(file_in,in);}
2399  std::pair<unsigned long,unsigned long> tmp(are->get_id(),are->get_id());
2400  gnexistant.insert(tmp);FEM_NOEUD *femno;
2401  LISTE_FEM_NOEUD::iterator it;
2402  for (FEM_NOEUD *notmp=mai->get_premier_noeud(it);notmp!=NULL;notmp=mai->get_suivant_noeud(it))
2403  {
2404  //---------------------------------------------------------
2405  if ((MG_NOEUD*)notmp->get_mg_element_maillage()!=0)
2406  {
2407  if (lstnoeud.existe((MG_NOEUD*)notmp->get_mg_element_maillage()))
2408  {
2409  nbelementreel++;
2410  {sprintf(in," N%s",ot.get_base(notmp->get_numero(),base).c_str());ot.mg_fprintf(file_in,in);}
2411  if ((nbelementreel%8)==0) {sprintf(in,"\n ");ot.mg_fprintf(file_in,in);}
2412  }
2413  }
2414  else if(notmp->get_lien_topologie()==are)
2415  {
2416  nbelementreel++;
2417  {sprintf(in," N%s",ot.get_base(notmp->get_numero(),base).c_str());ot.mg_fprintf(file_in,in);}
2418  if ((nbelementreel%8)==0) {sprintf(in,"\n ");ot.mg_fprintf(file_in,in);}
2419  }
2420  }
2421 
2422  if ((nbelementreel%8)!=0) {sprintf(in,"\n");ot.mg_fprintf(file_in,in);}
2423  {sprintf(in,"FINSF\n" );ot.mg_fprintf(file_in,in);}
2424  {sprintf(in, "%%\n" );ot.mg_fprintf(file_in,in);}
2425  }
2426  }
2427  LISTE_MG_FACE::iterator itfac;
2428  for (MG_FACE* fac=geo->get_premier_face(itfac);fac;fac=geo->get_suivant_face(itfac))
2429  {
2430  TPL_MAP_ENTITE<MG_NOEUD*> lstnoeud;
2431  if (fac->est_une_topo_element())
2432  {
2433  MG_FACE_ELEMENT* facele=(MG_FACE_ELEMENT*)fac;
2434  int nbele=facele->get_nb_element();
2435  for (int i=0;i<nbele;i++)
2436  {
2437  MG_ELEMENT_MAILLAGE* maiele=facele->get_lien_maillage()->get(i);
2439  {
2440  MG_TRIANGLE* tri=(MG_TRIANGLE*)maiele;
2441  if ((tri->get_noeud1()->get_lien_topologie()==NULL) || (tri->get_noeud1()->get_lien_topologie()==tri->get_lien_topologie())) lstnoeud.ajouter(tri->get_noeud1());
2442  if ((tri->get_noeud2()->get_lien_topologie()==NULL) || (tri->get_noeud2()->get_lien_topologie()==tri->get_lien_topologie()))lstnoeud.ajouter(tri->get_noeud2());
2443  if ((tri->get_noeud3()->get_lien_topologie()==NULL) || (tri->get_noeud3()->get_lien_topologie()==tri->get_lien_topologie()))lstnoeud.ajouter(tri->get_noeud3());
2444  }
2446  {
2447  MG_QUADRANGLE* qua=(MG_QUADRANGLE*)maiele;
2448  if ((qua->get_noeud1()->get_lien_topologie()==NULL) || (qua->get_noeud1()->get_lien_topologie()==qua->get_lien_topologie()))lstnoeud.ajouter(qua->get_noeud1());
2449  if ((qua->get_noeud2()->get_lien_topologie()==NULL) || (qua->get_noeud2()->get_lien_topologie()==qua->get_lien_topologie()))lstnoeud.ajouter(qua->get_noeud2());
2450  if ((qua->get_noeud3()->get_lien_topologie()==NULL) || (qua->get_noeud3()->get_lien_topologie()==qua->get_lien_topologie()))lstnoeud.ajouter(qua->get_noeud3());
2451  if ((qua->get_noeud4()->get_lien_topologie()==NULL) || (qua->get_noeud4()->get_lien_topologie()==qua->get_lien_topologie()))lstnoeud.ajouter(qua->get_noeud4());
2452  }
2453  }
2454 
2455  }
2456 
2457  if (lstnoeud.get_nb()>0)
2458  {
2459  int nbelementreel=0;
2460  {sprintf(in, "GROUP_NO NOM=GNF%lu \n ",fac->get_id());ot.mg_fprintf(file_in,in);}
2461  std::pair<unsigned long,unsigned long> tmp(fac->get_id(),fac->get_id());
2462  gnexistant.insert(tmp);
2463  FEM_NOEUD *femno;
2464  LISTE_FEM_NOEUD::iterator it;
2465  for (FEM_NOEUD *notmp=mai->get_premier_noeud(it);notmp!=NULL;notmp=mai->get_suivant_noeud(it))
2466  {
2467  if ((MG_NOEUD*)notmp->get_mg_element_maillage()!=0)
2468  {
2469  if (lstnoeud.existe((MG_NOEUD*)notmp->get_mg_element_maillage()))
2470  {
2471  nbelementreel++;
2472  {sprintf(in," N%s",ot.get_base(notmp->get_numero(),base).c_str());ot.mg_fprintf(file_in,in);}
2473  if ((nbelementreel%8)==0) {sprintf(in,"\n ");ot.mg_fprintf(file_in,in);}
2474  }
2475  }
2476  else if(notmp->get_lien_topologie()==fac)
2477  {
2478  nbelementreel++;
2479  {sprintf(in," N%s",ot.get_base(notmp->get_numero(),base).c_str());ot.mg_fprintf(file_in,in);}
2480  if ((nbelementreel%8)==0) {sprintf(in,"\n ");ot.mg_fprintf(file_in,in);}
2481  }
2482  }
2483  if ((nbelementreel%8)!=0) {sprintf(in,"\n");ot.mg_fprintf(file_in,in);}
2484  {sprintf(in,"FINSF\n" );ot.mg_fprintf(file_in,in);}
2485  {sprintf(in, "%%\n" );ot.mg_fprintf(file_in,in);}
2486  }
2487  }
2488  }
2489  // Mini poutre
2490  if (minipresent.get_nb()>0)
2491  {
2492  int nbelementreel=0;
2493  sprintf(in, "GROUP_MA NOM=GMMINI\n ");ot.mg_fprintf(file_in,in);
2495  for (FEM_ELEMENT1* seg=minipresent.get_premier(it);seg!=NULL;seg=minipresent.get_suivant(it))
2496  {
2497  nbelementreel++;
2498  {sprintf(in," M%s",ot.get_base(seg->get_numero(),base).c_str());ot.mg_fprintf(file_in,in);}
2499  if ((nbelementreel%8)==0) {sprintf(in,"\n ");ot.mg_fprintf(file_in,in);}
2500  }
2501  if ((nbelementreel%8)!=0) {sprintf(in,"\n");ot.mg_fprintf(file_in,in);}
2502  {sprintf(in,"FINSF\n" );ot.mg_fprintf(file_in,in);}
2503  {sprintf(in, "%%\n" );ot.mg_fprintf(file_in,in);}
2504  }
2505  // Groupes de mailles
2506  int nbarete=geo->get_nb_mg_arete(); // Groupes d'arêtes
2507  for (int j=0;j<nbarete;j++)
2508  {
2509  MG_ARETE* arete=geo->get_mg_arete(j);
2510  int nbelement=arete->get_lien_fem_maillage()->get_nb();
2511  int nbelementreel=0;
2512  {sprintf(in, "GROUP_MA NOM=GMA%lu \n ",arete->get_id());ot.mg_fprintf(file_in,in);}
2513  for (int k=0;k<nbelement;k++)
2514  {
2515  FEM_ELEMENT1* seg=(FEM_ELEMENT1*)arete->get_lien_fem_maillage()->get(k);
2516  if (mai->get_fem_element1id(seg->get_id())==NULL) continue;
2517  nbelementreel++;
2518  {sprintf(in," M%s",ot.get_base(seg->get_numero(),base).c_str());ot.mg_fprintf(file_in,in);}
2519  if ((nbelementreel%8)==0) {sprintf(in,"\n ");ot.mg_fprintf(file_in,in);}
2520  }
2521  if ((nbelementreel%8)!=0) {sprintf(in,"\n");ot.mg_fprintf(file_in,in);}
2522  {sprintf(in,"FINSF\n" );ot.mg_fprintf(file_in,in);}
2523  {sprintf(in, "%%\n" );ot.mg_fprintf(file_in,in);}
2524  }
2525  int nbpoutre=geo->get_nb_mg_poutre(); // Groupes de coques
2526  int nbcoque=geo->get_nb_mg_coque(); // Groupes de coques
2527 
2528  int nbface=geo->get_nb_mg_face(); // Groupes de faces
2529  for (int j=0;j<nbface;j++)
2530  {
2531  MG_FACE* face=geo->get_mg_face(j);
2532  int nbelement=face->get_lien_fem_maillage()->get_nb();
2533  int nbelementreel=0;
2534  {sprintf(in, "GROUP_MA NOM=GMF%lu \n ",face->get_id());ot.mg_fprintf(file_in,in);}
2537  OT_VECTEUR_3D dirx(1.,0.,0.);
2538  OT_VECTEUR_3D diry(0.,1.,0.);
2539  for (int k=0;k<nbelement;k++)
2540  {
2542  if (mai->get_fem_element2id(tri->get_id())==NULL) continue;
2543  if (mai->get_degre()==1)
2544  {
2545  FEM_NOEUD* no1=tri->get_fem_noeud(0);
2546  FEM_NOEUD* no2=tri->get_fem_noeud(1);
2547  FEM_NOEUD* no3=tri->get_fem_noeud(2);
2548 
2549  double *xyz1=no1->get_coord();
2550  double *xyz2=no2->get_coord();
2551  double *xyz3=no3->get_coord();
2552  OT_VECTEUR_3D vec1(xyz1,xyz2);
2553  OT_VECTEUR_3D vec2(xyz1,xyz3);
2554  OT_VECTEUR_3D normale=vec1&vec2; // Normale au triangle
2555  normale.norme();
2556 
2557  if (fabs(fabs(normale*dirx)-1.)<0.0000000001) // Si l'axe X est // à la normale (produit scalaire=1 ou -1)
2558  listey.ajouter(tri);
2559  else // Sinon l'axe Y est // à la normale
2560  listex.ajouter(tri);
2561  }
2562  if (mai->get_degre()==2)
2563  {
2564  FEM_NOEUD* no1=tri->get_fem_noeud(0);
2565  FEM_NOEUD* no2=tri->get_fem_noeud(2);
2566  FEM_NOEUD* no3=tri->get_fem_noeud(4);
2567 
2568  double *xyz1=no1->get_coord();
2569  double *xyz2=no2->get_coord();
2570  double *xyz3=no3->get_coord();
2571 
2572  OT_VECTEUR_3D vec1(xyz1,xyz2);
2573  OT_VECTEUR_3D vec2(xyz1,xyz3);
2574  OT_VECTEUR_3D normale=vec1&vec2; // Normale au triangle
2575  normale.norme();
2576 
2577  if (fabs(fabs(normale*dirx)-1.)<0.0000000001) // Si l'axe X est // à la normale (produit scalaire=1 ou -1)
2578  listey.ajouter(tri);
2579  else // Sinon l'axe Y est // à la normale
2580  listex.ajouter(tri);
2581  }
2582  if (mai->get_fem_element2id(tri->get_id())==NULL) continue;
2583  nbelementreel++;
2584  {sprintf(in," M%s",ot.get_base(tri->get_numero(),base).c_str());ot.mg_fprintf(file_in,in);}
2585  if ((nbelementreel%8)==0) {sprintf(in,"\n ");ot.mg_fprintf(file_in,in);}
2586  }
2587  if ((nbelementreel%8)!=0) {sprintf(in,"\n");ot.mg_fprintf(file_in,in);}
2588  {sprintf(in,"FINSF\n" );ot.mg_fprintf(file_in,in);}
2589  {sprintf(in, "%%\n" );ot.mg_fprintf(file_in,in);}
2590 
2591  nbelementreel=0;
2592  int nbx=listex.get_nb();
2593  if ( (nbx!=0) && (nbcoque!=0)) // Si le groupe de mailles X n'est pas vide
2594  {
2595  char nomgroupex[500];
2596  sprintf(nomgroupex,"GMF%luX",face->get_id());
2597  std::pair<std::string,std::string> tmp(nomgroupex,nomgroupex);
2598  listegroupedemaillexy.insert(tmp);
2599  {sprintf(in, "GROUP_MA NOM=GMF%luX \n ",face->get_id());ot.mg_fprintf(file_in,in);}
2600 
2602  for (FEM_ELEMENT2* tri=listex.get_premier(it);tri!=NULL;tri=listex.get_suivant(it))
2603  {
2604  nbelementreel++;
2605  {sprintf(in," M%s",ot.get_base(tri->get_numero(),base).c_str());ot.mg_fprintf(file_in,in);}
2606  if ((nbelementreel%8)==0) {sprintf(in,"\n ");ot.mg_fprintf(file_in,in);}
2607  }
2608  if ((nbelementreel%8)!=0) {sprintf(in,"\n");ot.mg_fprintf(file_in,in);}
2609  {sprintf(in,"FINSF\n" );ot.mg_fprintf(file_in,in);}
2610  {sprintf(in, "%%\n" );ot.mg_fprintf(file_in,in);}
2611  }
2612 
2613  nbelementreel=0;
2614  int nby=listey.get_nb();
2615  if ((nby!=0) && (nbcoque!=0)) // Si le groupe de mailles Y n'est pas vide
2616  {
2617  char nomgroupey[500];
2618  sprintf(nomgroupey,"GMF%luY",face->get_id());
2619  std::pair<std::string,std::string> tmp(nomgroupey,nomgroupey);
2620  listegroupedemaillexy.insert(tmp);
2621  {sprintf(in, "GROUP_MA NOM=GMF%luY \n ",face->get_id());ot.mg_fprintf(file_in,in);}
2622 
2624  for (FEM_ELEMENT2* tri=listey.get_premier(it);tri!=NULL;tri=listey.get_suivant(it))
2625  {
2626  nbelementreel++;
2627  {sprintf(in," M%s",ot.get_base(tri->get_numero(),base).c_str());ot.mg_fprintf(file_in,in);}
2628  if ((nbelementreel%8)==0) {sprintf(in,"\n ");ot.mg_fprintf(file_in,in);}
2629  }
2630  if ((nbelementreel%8)!=0) {sprintf(in,"\n");ot.mg_fprintf(file_in,in);}
2631  {sprintf(in,"FINSF\n" );ot.mg_fprintf(file_in,in);}
2632  {sprintf(in, "%%\n" );ot.mg_fprintf(file_in,in);}
2633  }
2634  }
2635  for (int j=0;j<nbpoutre;j++)
2636  {
2637  MG_POUTRE* poutre=geo->get_mg_poutre(j);
2638  {sprintf(in, "GROUP_MA NOM=GMP%lu \n ",poutre->get_id());ot.mg_fprintf(file_in,in);}
2639  int nbelementreel=0;
2640  if (poutre->est_une_topo_element())
2641  {
2642  int nbelement=((MG_POUTRE_ELEMENT*)poutre)->get_nb_element();
2643  for (int m=0;m<nbelement;m++)
2644  {
2645  MG_ELEMENT_MAILLAGE* mgele=((MG_POUTRE_ELEMENT*)poutre)->get_element(m);
2646  LISTE_FEM_ELEMENT1::iterator it;
2647  FEM_ELEMENT1* ele;
2648  for (FEM_ELEMENT1* eletmp=mai->get_premier_element1(it);eletmp;eletmp=mai->get_suivant_element1(it)) // pas terrible en efficacite VF juillet 2015
2649  if (eletmp->get_mg_element_maillage()==mgele) ele=eletmp;
2650  nbelementreel++;
2651  {sprintf(in," M%s",ot.get_base(ele->get_numero(),base).c_str());ot.mg_fprintf(file_in,in);}
2652  if ((nbelementreel%8)==0) {sprintf(in,"\n ");ot.mg_fprintf(file_in,in);}
2653  }
2654  }
2655  else
2656  {
2657  int nbboucle=poutre->get_nb_mg_boucle();
2658  for (int k=0;k<nbboucle;k++)
2659  {
2660  MG_BOUCLE* bou=poutre->get_mg_boucle(k);
2661  int nbarete=bou->get_nb_mg_coarete();
2662  for (int l=0;l<nbarete;l++)
2663  {
2664  MG_ARETE* are=bou->get_mg_coarete(l)->get_arete();
2665  int nbelement=are->get_lien_fem_maillage()->get_nb();
2666  for (int m=0;m<nbelement;m++)
2667  {
2669  if (mai->get_fem_element1id(are->get_id())==NULL) continue;
2670  nbelementreel++;
2671  {sprintf(in," M%s",ot.get_base(seg->get_numero(),base).c_str());ot.mg_fprintf(file_in,in);}
2672  if ((nbelementreel%8)==0) {sprintf(in,"\n ");ot.mg_fprintf(file_in,in);}
2673  }
2674  }
2675  }
2676 
2677  }
2678 
2679  if (((nbelementreel)%8)!=0) {sprintf(in,"\n");ot.mg_fprintf(file_in,in);}
2680  {sprintf(in,"FINSF\n" );ot.mg_fprintf(file_in,in);}
2681  {sprintf(in, "%%\n" );ot.mg_fprintf(file_in,in);}
2682  }
2683  for (int j=0;j<nbcoque;j++)
2684  {
2685  MG_COQUE* coque=geo->get_mg_coque(j);
2686  {sprintf(in, "GROUP_MA NOM=GMC%lu \n ",coque->get_id());ot.mg_fprintf(file_in,in);}
2687  int nbelementreel=0;
2688  if (coque->est_une_topo_element())
2689  {
2690  int nbelement=((MG_COQUE_ELEMENT*)coque)->get_nb_element();
2691  for (int m=0;m<nbelement;m++)
2692  {
2693  MG_ELEMENT_MAILLAGE* mgele=((MG_COQUE_ELEMENT*)coque)->get_element(m);
2694  LISTE_FEM_ELEMENT2::iterator it;
2695  FEM_ELEMENT2* ele;
2696  for (FEM_ELEMENT2* eletmp=mai->get_premier_element2(it);eletmp;eletmp=mai->get_suivant_element2(it)) // pas terrible en efficacite VF juillet 2015
2697  if (eletmp->get_mg_element_maillage()==mgele) ele=eletmp;
2698  nbelementreel++;
2699  {sprintf(in," M%s",ot.get_base(ele->get_numero(),base).c_str());ot.mg_fprintf(file_in,in);}
2700  if ((nbelementreel%8)==0) {sprintf(in,"\n ");ot.mg_fprintf(file_in,in);}
2701  }
2702  }
2703  else
2704  {
2705  int nbcoquille=coque->get_nb_mg_coquille();
2706  for (int k=0;k<nbcoquille;k++)
2707  {
2708  MG_COQUILLE* coq=coque->get_mg_coquille(k);
2709  int nbface=coq->get_nb_mg_coface();
2710  for (int l=0;l<nbface;l++)
2711  {
2712  MG_FACE* face=coq->get_mg_coface(l)->get_face();
2713  int nbelement=face->get_lien_fem_maillage()->get_nb();
2714  for (int m=0;m<nbelement;m++)
2715  {
2717  if (mai->get_fem_element2id(tri->get_id())==NULL) continue;
2718  nbelementreel++;
2719  {sprintf(in," M%s",ot.get_base(tri->get_numero(),base).c_str());ot.mg_fprintf(file_in,in);}
2720  if ((nbelementreel%8)==0) {sprintf(in,"\n ");ot.mg_fprintf(file_in,in);}
2721  }
2722  }
2723  }
2724 
2725  }
2726 
2727  if (((nbelementreel)%8)!=0) {sprintf(in,"\n");ot.mg_fprintf(file_in,in);}
2728  {sprintf(in,"FINSF\n" );ot.mg_fprintf(file_in,in);}
2729  {sprintf(in, "%%\n" );ot.mg_fprintf(file_in,in);}
2730  }
2731  //int nbvol=geo->get_nb_mg_volume(); // Groupes de tétraèdres
2732  for (int j=0;j<nbvol;j++)
2733  {
2734  MG_VOLUME* vol=geo->get_mg_volume(j);
2735  {sprintf(in, "GROUP_MA NOM=GMV%lu \n ",vol->get_id());ot.mg_fprintf(file_in,in);}
2736  int nbelement=vol->get_lien_fem_maillage()->get_nb();
2737  int nbelementreel=0;
2738  for (int k=0;k<nbelement;k++)
2739  {
2741  if (mai->get_fem_element3id(tet->get_id())==NULL) continue;
2742  {
2743  nbelementreel++;
2744  {sprintf(in," M%s",ot.get_base(tet->get_numero(),base).c_str());ot.mg_fprintf(file_in,in);}
2745  if ((nbelementreel%8)==0) {sprintf(in,"\n ");ot.mg_fprintf(file_in,in);}
2746  }
2747  }
2748  if (((nbelementreel)%8)!=0) {sprintf(in,"\n");ot.mg_fprintf(file_in,in);}
2749  {sprintf(in,"FINSF\n" );ot.mg_fprintf(file_in,in);}
2750  {sprintf(in, "%%\n" );ot.mg_fprintf(file_in,in);}
2751 
2753  {
2754  for (int i=1;i<=niveaumax;i++)
2755  {
2756  int nbelement=lst[i].size();
2757  if (nbelement==0) continue;
2758  {sprintf(in, "GROUP_MA NOM=GM_%d \n ",i);ot.mg_fprintf(file_in,in);}
2759  for (int k=0;k<nbelement;k++)
2760  {
2761  FEM_ELEMENT3* tet=lst[i].at(k);
2762  {sprintf(in," M%s",ot.get_base(tet->get_numero(),base).c_str());ot.mg_fprintf(file_in,in);}
2763  if ((k%8)==7) {sprintf(in,"\n ");ot.mg_fprintf(file_in,in);}
2764  }
2765  if (((nbelement)%8)!=0) {sprintf(in,"\n");ot.mg_fprintf(file_in,in);}
2766  {sprintf(in,"FINSF\n" );ot.mg_fprintf(file_in,in);}
2767  {sprintf(in, "%%\n" );ot.mg_fprintf(file_in,in);}
2768  }
2769  }
2770  }
2771  {sprintf(in, "%%\nFIN\n" );ot.mg_fprintf(file_in,in);}
2772  fclose(file_in);
2773 }
2774 
2775 double MG_EXPORT::aster(class MG_GEOMETRIE *geo,class FEM_MAILLAGE* mai,std::string fichier,int typeetude,char *coderesu,double penal,int niveaumax,std::vector<FEM_ELEMENT3*> *lst)
2776 {
2778 LISTE_MG_VOLUME::iterator itvol;
2779 LISTE_MG_COQUE::iterator itcoq;
2780 
2781 for (MG_VOLUME* vol=geo->get_premier_volume(itvol);vol!=NULL;vol=geo->get_suivant_volume(itvol))
2782  for (int i=0;i<vol->get_nb_mg_coquille();i++)
2783  for (int j=0;j<vol->get_mg_coquille(i)->get_nb_mg_coface();j++)
2784  lstcoface.ajouter(vol->get_mg_coquille(i)->get_mg_coface(j));
2785 for (MG_COQUE* coq=geo->get_premier_coque(itcoq);coq!=NULL;coq=geo->get_suivant_coque(itcoq))
2786 for (int i=0;i<coq->get_nb_mg_coquille();i++)
2787  for (int j=0;j<coq->get_mg_coquille(i)->get_nb_mg_coface();j++)
2788  lstcoface.ajouter(coq->get_mg_coquille(i)->get_mg_coface(j));
2789 aster(&lstcoface,mai,fichier,typeetude,coderesu,penal,niveaumax,lst);
2790 return get_version_aster();
2791 }
2792 
2793 
2794 
2795 void MG_EXPORT::aster(TPL_LISTE_ENTITE<MG_COFACE*> *lstcoface,class FEM_MAILLAGE* mai,std::string fichier,int typeetude,char *coderesu,double penal,int niveaumax,std::vector<FEM_ELEMENT3*> *lst)
2796 {
2797  std::map<std::string,std::string> listegroupedemaillexy;
2798  std::map<unsigned long,unsigned long> gnexistant;
2799  TPL_MAP_ENTITE<FEM_ELEMENT1*> minipresent;
2800  aster_ecrire_export(fichier,typeetude);
2802  aster_ecrire_mail(minipresent,2,lstcoface,mai,fichier,typeetude,niveaumax,lst,listegroupedemaillexy,gnexistant);
2803  else
2804  aster_ecrire_mail(minipresent,3,lstcoface,mai,fichier,typeetude,niveaumax,lst,listegroupedemaillexy,gnexistant);
2805  MG_GEOMETRIE* geo=mai->get_mg_geometrie();
2806  int nbvol=geo->get_nb_mg_volume();
2807  int nbcoque=geo->get_nb_mg_coque();
2808  int nbpoutre=geo->get_nb_mg_poutre();
2809  int deg= mai->get_degre();
2810  if (typeetude==MAGIC::CALCUL_ASTER::ELASTIQUE)
2811  {
2812  if ((nbvol>0) && (nbpoutre>0)) typeetude=MAGIC::CALCUL_ASTER::ELASTIQUE_MIXTE_1D3D;
2813  else if (nbvol>0) typeetude=MAGIC::CALCUL_ASTER::ELASTIQUE_3D;
2814  else if (nbcoque>0)
2815  {
2816  if (deg==1) typeetude=MAGIC::CALCUL_ASTER::ELASTIQUE_PLAQUE;
2817  else if (deg==2) typeetude=MAGIC::CALCUL_ASTER::ELASTIQUE_COQUE;
2818  }
2819  }
2820  if (typeetude==MAGIC::CALCUL_ASTER::RIGIDITE)
2821  {
2822  if ((nbvol>0) && (nbpoutre>0)) typeetude=MAGIC::CALCUL_ASTER::RIGIDITE_MIXTE_1D3D;
2823  else if (nbvol>0) typeetude=MAGIC::CALCUL_ASTER::RIGIDITE_3D;
2824  else if (nbcoque>0)
2825  {
2826  if (deg==1) typeetude=MAGIC::CALCUL_ASTER::RIGIDITE_PLAQUE;
2827  else if (deg==2) typeetude=MAGIC::CALCUL_ASTER::RIGIDITE_COQUE;
2828  }
2829  }
2831  {
2832  if (nbvol>0) typeetude=MAGIC::CALCUL_ASTER::ELASTIQUE_GROT_GDEF_3D;
2833  else if (nbcoque>0)
2834  {
2836  else if (deg==2) typeetude=MAGIC::CALCUL_ASTER::ELASTIQUE_GROT_GDEF_PLAQUE;
2837  }
2838  }
2840  if (nbvol>0) typeetude=MAGIC::CALCUL_ASTER::ELASTIQUE_NON_LINEAIRE_3D;
2841 
2844 
2845  if (typeetude==MAGIC::CALCUL_ASTER::THERMIQUE)
2846  if (nbvol>0) typeetude=MAGIC::CALCUL_ASTER::THERMIQUE_3D;
2847  if (typeetude==MAGIC::CALCUL_ASTER::PLASTIQUE)
2848  {
2849  //if ((nbvol>0) && (nbpoutre>0)) typeetude=MAGIC::CALCUL_ASTER::PLASTIQUE_MIXTE_1D3D;
2850  //else if (nbvol>0)
2851  if (nbvol>0)
2852  {
2854  for(long k=0;k<geo->get_nb_mg_volume();k++)
2855  {
2856  double val_CM=-1;
2857  geo->get_mg_volume(k)->get_valeur_ccf((char*)"CM",val_CM);
2858  if(val_CM>0) typeetude=MAGIC::CALCUL_ASTER::PLASTIQUE_COURBE;
2859  else
2860  {
2861  geo->get_mg_volume(k)->get_valeur_ccf((char*)"cm",val_CM);
2862  if(val_CM>0) typeetude=MAGIC::CALCUL_ASTER::PLASTIQUE_COURBE;
2863  }
2864  }
2865  }
2866  else if (nbcoque>0)
2867  {
2869  else if (deg==2) typeetude=MAGIC::CALCUL_ASTER::PLASTIQUE_BILINEAIRE_COQUE;
2870  }
2871  }
2872 
2873  bool desactiveerreur=false;
2874  if ((typeetude==MAGIC::CALCUL_ASTER::ELASTIQUE_3D)&&(deg==2)) desactiveerreur=true;
2875  if ((typeetude==MAGIC::CALCUL_ASTER::OPTIMISATIONTOPOLOGIQUE)&&(deg==2)) desactiveerreur=true;
2876  if (typeetude==MAGIC::CALCUL_ASTER::ELASTIQUE_MIXTE_1D3D) desactiveerreur=true;
2877  double version;
2878  FILE *in;
2879  std::vector<std::string> chargepresente;
2880  char *type_ccf;
2881  char form;
2882  int NONLINEAIRE=param_aster.get_valeur("nonlineaire");
2883  // MG_ELEMENT_TOPOLOGIQUE *ele;
2884  switch (typeetude)
2885  {
2886  case MAGIC::CALCUL_ASTER::ELASTIQUE_MIXTE_1D3D:// attention poutre droite
2887  {
2888  version=aster_ecrire_comm_debut(fichier,&in);
2891  aster_ecrire_comm_caracteristiques_poutre(in,nbpoutre,minipresent,geo);
2892  aster_ecrire_comm_defi_materiau_elastique(in,nbvol,nbcoque,nbpoutre,false,geo);
2893  aster_ecrire_comm_affe_materiau(in,"MAIL",nbvol,nbcoque,nbpoutre,geo);
2894  aster_ecrire_comm_condition_limite(in,geo,true,true,false,false,true,false,true,chargepresente,gnexistant);
2895  aster_ecrire_comm_meca_statique(in,geo,true,false,true,desactiveerreur,false,chargepresente,coderesu);
2896  aster_ecrire_comm_imprime_resultat_statique(in,coderesu,true,true,desactiveerreur);
2898  break;
2899  }
2900  case MAGIC::CALCUL_ASTER::RIGIDITE_MIXTE_1D3D:// attention poutre droite
2901  {
2902  version=aster_ecrire_comm_debut(fichier,&in);
2905  aster_ecrire_comm_caracteristiques_poutre(in,nbpoutre,minipresent,geo);
2906  aster_ecrire_comm_defi_materiau_elastique(in,nbvol,nbcoque,nbpoutre,false,geo);
2907  aster_ecrire_comm_affe_materiau(in,"MAIL",nbvol,nbcoque,nbpoutre,geo);
2908  aster_ecrire_comm_rigidite(in,false);
2910  break;
2911  }
2913  {
2914  bool estortho=false;
2915  version=aster_ecrire_comm_debut(fichier,&in);
2917  aster_ecrire_comm_definiton_ef(in,"MECANIQUE","3D");
2918  aster_ecrire_comm_caracteristiques_volume(in,nbvol,geo,estortho);
2919  aster_ecrire_comm_defi_materiau_elastique(in,nbvol,nbcoque,nbpoutre,estortho,geo);
2920  aster_ecrire_comm_affe_materiau(in,"MAIL",nbvol,nbcoque,nbpoutre,geo);
2921  aster_ecrire_comm_condition_limite(in,geo,true,true,false,false,true,false,true,chargepresente,gnexistant);
2922  aster_ecrire_comm_meca_statique(in,geo,true,false,false,desactiveerreur,estortho,chargepresente,coderesu);
2923  aster_ecrire_comm_imprime_resultat_statique(in,coderesu,true,false,desactiveerreur);
2925  break;
2926  }
2928  {
2929  version=aster_ecrire_comm_debut(fichier,&in);
2931  aster_ecrire_comm_definiton_ef(in,"MECANIQUE","3D");
2932  aster_ecrire_comm_defi_materiau_elastique(in,nbvol,nbcoque,nbpoutre,false,geo);
2933  aster_ecrire_comm_affe_materiau(in,"MAIL",nbvol,nbcoque,nbpoutre,geo);
2934  aster_ecrire_comm_rigidite(in,false);
2936  break;
2937  }
2939  {
2940  version=aster_ecrire_comm_debut(fichier,&in);
2942  aster_ecrire_comm_definiton_ef(in,"MECANIQUE","DKT");
2943  aster_ecrire_comm_caracteristiques_coque(in,nbcoque,geo,listegroupedemaillexy);
2944  aster_ecrire_comm_defi_materiau_elastique(in,nbvol,nbcoque,nbpoutre,false,geo);
2945  aster_ecrire_comm_affe_materiau(in,"MAIL",nbvol,nbcoque,nbpoutre,geo);
2946  aster_ecrire_comm_condition_limite(in,geo,true,true,false,false,false,true,true,chargepresente,gnexistant);
2947  aster_ecrire_comm_meca_statique(in,geo,false,true,false,false,false,chargepresente,coderesu);
2950  break;
2951  }
2953  {
2954  version=aster_ecrire_comm_debut(fichier,&in);
2956  aster_ecrire_comm_definiton_ef(in,"MECANIQUE","DKT");
2957  aster_ecrire_comm_caracteristiques_coque(in,nbcoque,geo,listegroupedemaillexy);
2958  aster_ecrire_comm_defi_materiau_elastique(in,nbvol,nbcoque,nbpoutre,false,geo);
2959  aster_ecrire_comm_affe_materiau(in,"MAIL",nbvol,nbcoque,nbpoutre,geo);
2960  aster_ecrire_comm_rigidite(in,true);
2962  break;
2963  }
2965  {
2966  version=aster_ecrire_comm_debut(fichier,&in);
2969  aster_ecrire_comm_caracteristiques_coque(in,nbcoque,geo,listegroupedemaillexy);
2970  aster_ecrire_comm_defi_materiau_elastique(in,nbvol,nbcoque,nbpoutre,false,geo);
2971  aster_ecrire_comm_affe_materiau(in,"MAIL2",nbvol,nbcoque,nbpoutre,geo);
2972  aster_ecrire_comm_condition_limite(in,geo,true,true,false,false,false,true,true,chargepresente,gnexistant);
2973  aster_ecrire_comm_meca_statique(in,geo,false,true,false,false,false,chargepresente,coderesu);
2976  break;
2977  }
2979  {
2980  version=aster_ecrire_comm_debut(fichier,&in);
2983  aster_ecrire_comm_caracteristiques_coque(in,nbcoque,geo,listegroupedemaillexy);
2984  aster_ecrire_comm_defi_materiau_elastique(in,nbvol,nbcoque,nbpoutre,false,geo);
2985  aster_ecrire_comm_affe_materiau(in,"MAIL2",nbvol,nbcoque,nbpoutre,geo);
2986  aster_ecrire_comm_rigidite(in,true);
2988  break;
2989  }
2991  {
2992  version=aster_ecrire_comm_debut(fichier,&in);
2994  aster_ecrire_comm_definiton_ef(in,"MECANIQUE","3D");
2997  aster_ecrire_comm_condition_limite(in,geo,true,true,false,false,true,false,true,chargepresente,gnexistant);
2998  aster_ecrire_comm_meca_statique(in,geo,true,false,false,false,desactiveerreur,chargepresente,coderesu);
2999  aster_ecrire_comm_imprime_resultat_statique(in,coderesu,true,false,desactiveerreur);
3001  break;
3002  }
3004  {
3005  version=aster_ecrire_comm_debut(fichier,&in);
3007  aster_ecrire_comm_definiton_ef(in,"MECANIQUE","C_PLAN");
3008  aster_ecrire_comm_defi_materiau_elastique(in,nbvol,nbcoque,nbpoutre,false,geo);
3009  aster_ecrire_comm_affe_materiau(in,"MAIL",nbvol,nbcoque,nbpoutre,geo);
3010  aster_ecrire_comm_condition_limite(in,geo,true,true,false,false,false,false,false,chargepresente,gnexistant);
3011  aster_ecrire_comm_meca_statique(in,geo,true,false,false,false,false,chargepresente,coderesu);
3012  aster_ecrire_comm_imprime_resultat_statique(in,coderesu,false,false,false);
3014  break;
3015  }
3017  {
3018  version=aster_ecrire_comm_debut(fichier,&in);
3020  aster_ecrire_comm_definiton_ef(in,"MECANIQUE","C_PLAN");
3021  aster_ecrire_comm_defi_materiau_elastique(in,nbvol,nbcoque,nbpoutre,false,geo);
3022  aster_ecrire_comm_affe_materiau(in,"MAIL",nbvol,nbcoque,nbpoutre,geo);
3023  aster_ecrire_comm_rigidite(in,false);
3025  break;
3026  }
3028  {
3029  version=aster_ecrire_comm_debut(fichier,&in);
3031  aster_ecrire_comm_definiton_ef(in,"MECANIQUE","D_PLAN");
3032  aster_ecrire_comm_defi_materiau_elastique(in,nbvol,nbcoque,nbpoutre,false,geo);
3033  aster_ecrire_comm_affe_materiau(in,"MAIL",nbvol,nbcoque,nbpoutre,geo);
3034  aster_ecrire_comm_condition_limite(in,geo,true,true,false,false,false,false,false,chargepresente,gnexistant);
3035  aster_ecrire_comm_meca_statique(in,geo,true,false,false,false,false,chargepresente,coderesu);
3036  aster_ecrire_comm_imprime_resultat_statique(in,coderesu,false,false,false);
3038  break;
3039  }
3041  {
3042  version=aster_ecrire_comm_debut(fichier,&in);
3044  aster_ecrire_comm_definiton_ef(in,"MECANIQUE","D_PLAN");
3045  aster_ecrire_comm_defi_materiau_elastique(in,nbvol,nbcoque,nbpoutre,false,geo);
3046  aster_ecrire_comm_affe_materiau(in,"MAIL",nbvol,nbcoque,nbpoutre,geo);
3047  aster_ecrire_comm_rigidite(in,false);
3049  break;
3050  }
3052  {
3053 
3054  //aster_ecrire_comm_thermique(mai,fichier,noeudclasse);
3055  version=aster_ecrire_comm_debut(fichier,&in);
3057  aster_ecrire_comm_definiton_ef(in,"THERMIQUE","3D");
3058  aster_ecrire_comm_condition_limite(in,geo,false,false,true,false,true,false,true,chargepresente,gnexistant);
3059  aster_ecrire_comm_defi_materiau_thermique(in,nbvol,geo,form);
3060  if(form=='N')
3061  {
3062  aster_ecrire_comm_affe_materiau(in,"MAIL",nbvol,nbcoque,nbpoutre,geo);
3063  aster_ecrire_comm_ther_lineaire(in,geo,chargepresente);
3066  }
3067  if(form=='I')
3068  {
3069 
3070  if (NONLINEAIRE==1)
3071  {
3072  aster_ecrire_comm_ther_non_lineaire_iteratif(in,geo,nbvol,nbcoque,nbpoutre,chargepresente,gnexistant);
3073  }
3074  else
3075  {
3076  aster_ecrire_comm_ther_lineaire_iteratif(in,geo,nbvol,nbcoque,nbpoutre,chargepresente,gnexistant);
3077  }
3079  }
3080 
3081 
3082 
3083  break;
3084  }
3086  {
3087  version=aster_ecrire_comm_debut(fichier,&in);
3089  aster_ecrire_comm_definiton_ef(in,"MECANIQUE","3D");
3090  aster_ecrire_comm_defi_materiau_elastique(in,nbvol,nbcoque,nbpoutre,false,geo);
3091  aster_ecrire_comm_affe_materiau(in,"MAIL",nbvol,nbcoque,nbpoutre,geo);
3092  aster_ecrire_comm_condition_limite(in,geo,true,true,false,true,true,false,true,chargepresente,gnexistant);
3093  aster_ecrire_comm_statique_non_lineaire(version,in,geo,true,false,false,false,chargepresente,coderesu,"ELAS","GROT_GDEP");
3096  break;
3097  }
3099  {
3100  version=aster_ecrire_comm_debut(fichier,&in);
3102  aster_ecrire_comm_definiton_ef(in,"MECANIQUE","3D");
3103  aster_ecrire_comm_condition_limite(in,geo,true,true,false,true,true,false,true,chargepresente,gnexistant);
3105  aster_ecrire_comm_affe_materiau(in,"MAIL",nbvol,nbcoque,nbpoutre,geo);
3106  aster_ecrire_comm_statique_non_lineaire(version,in,geo,true,false,false,false,chargepresente,coderesu,"ELAS_VMIS_TRAC","GROT_GDEP");
3109  break;
3110  }
3111 
3113  {
3114  version=aster_ecrire_comm_debut(fichier,&in);
3116  aster_ecrire_comm_definiton_ef(in,"MECANIQUE","3D");
3117  aster_ecrire_comm_condition_limite(in,geo,true,true,false,true,true,false,true,chargepresente,gnexistant);
3118  aster_ecrire_comm_defi_materiau_elastique_volume_fatigue(in,nbvol,geo,niveaumax,penal);
3120  aster_ecrire_comm_statique_non_lineaire(version,in,geo,true,false,false,false,chargepresente,coderesu,"ELAS_VMIS_TRAC","GROT_GDEP");
3123  break;
3124 
3125  }
3127  {
3128  version=aster_ecrire_comm_debut(fichier,&in);
3130  aster_ecrire_comm_definiton_ef(in,"MECANIQUE","DKT");
3131  aster_ecrire_comm_caracteristiques_coque(in,nbcoque,geo,listegroupedemaillexy);
3132  aster_ecrire_comm_defi_materiau_elastique(in,nbvol,nbcoque,nbpoutre,false,geo);
3133  aster_ecrire_comm_affe_materiau(in,"MAIL",nbvol,nbcoque,nbpoutre,geo);
3134  aster_ecrire_comm_condition_limite(in,geo,true,true,false,true,false,true,true,chargepresente,gnexistant);
3135  aster_ecrire_comm_statique_non_lineaire(version,in,geo,false,true,false,false,chargepresente,coderesu,"ELAS","GROT_GDEP");
3138  break;
3139  }
3141  {
3142  version=aster_ecrire_comm_debut(fichier,&in);
3144  aster_ecrire_comm_definiton_ef(in,"MECANIQUE","3D");
3146  aster_ecrire_comm_affe_materiau(in,"MAIL",nbvol,nbcoque,nbpoutre,geo);
3147  aster_ecrire_comm_condition_limite(in,geo,true,true,false,true,true,false,true,chargepresente,gnexistant);
3148  aster_ecrire_comm_statique_non_lineaire(version,in,geo,true,false,false,false,chargepresente,coderesu,"VMIS_ISOT_LINE","SIMO_MIEHE");
3151  break;
3152  }
3154  {
3155  version=aster_ecrire_comm_debut(fichier,&in);
3157  aster_ecrire_comm_definiton_ef(in,"MECANIQUE","DKT");
3158  aster_ecrire_comm_caracteristiques_coque(in,nbcoque,geo,listegroupedemaillexy);
3160  aster_ecrire_comm_affe_materiau(in,"MAIL",nbvol,nbcoque,nbpoutre,geo);
3161  aster_ecrire_comm_condition_limite(in,geo,true,true,false,true,false,true,true,chargepresente,gnexistant);
3162  aster_ecrire_comm_statique_non_lineaire(version,in,geo,false,true,false,false,chargepresente,coderesu,"VMIS_ISOT_LINE","PETIT");//only: GDEF_LOG PETIT_REAC PETIT not:GDEF_HYPO_ELAS SIMO_MIEHE GROT_GDEP
3165  break;
3166  }
3167 
3168 
3169 
3171  {
3172  version=aster_ecrire_comm_debut(fichier,&in);
3174  aster_ecrire_comm_definiton_ef(in,"MECANIQUE","3D");
3176  aster_ecrire_comm_affe_materiau(in,"MAIL",nbvol,nbcoque,nbpoutre,geo);
3177  aster_ecrire_comm_condition_limite(in,geo,true,true,false,true,true,false,true,chargepresente,gnexistant);
3178  aster_ecrire_comm_statique_non_lineaire(version,in,geo,true,false,false,false,chargepresente,coderesu,"VMIS_ISOT_TRAC","SIMO_MIEHE");
3181  break;
3182  }
3183 
3184  }
3185 
3186 }
3187 
3188 double MG_EXPORT::aster_ecrire_comm_debut(std::string fichier,FILE **in)
3189 {
3190  double version=get_version_aster();
3191  std::string fichiercomm=fichier+".comm";
3192  *in=fopen(fichiercomm.c_str(),"wt");
3193  fprintf(*in,"################################################################################\n");
3194  fprintf(*in,"# Transfert MAGiC %s vers code ASTER %.1lf\n",MAGIC_VERSION,version);
3195  fprintf(*in,"################################################################################\n\n");
3196  fprintf(*in,"DEBUT();\n\n");
3197  return version;
3198 }
3199 
3201 {
3202  fprintf(in,"\n\nFIN();\n\n");
3203  fprintf(in,"################################################################################\n\n");
3204  fclose(in);
3205 }
3206 
3208 {
3209  fprintf(in,"# LECTURE DU MAILLAGE-----------------------------------------------------------\n");
3210  fprintf(in,"MAIL=LIRE_MAILLAGE(FORMAT='ASTER');\n\n");
3211 
3212 }
3213 
3214 void MG_EXPORT::aster_ecrire_comm_definiton_ef(FILE *in,std::string phenomene,std::string modelisation)
3215 {
3216  fprintf(in,"# DEFINITION DES ELEMENTS FINIS UTILISES----------------------------------------\n");
3217  fprintf(in,"MODCAL=AFFE_MODELE(MAILLAGE = MAIL, AFFE =_F(TOUT = 'OUI', PHENOMENE = '%s', MODELISATION = '%s' ,),);\n\n",phenomene.c_str(),modelisation.c_str());
3218 
3219 }
3220 
3221 
3223  {
3224  fprintf(in,"# DEFINITION DES ELEMENTS FINIS UTILISES----------------------------------------\n");
3225  fprintf(in,"MODCAL=AFFE_MODELE(MAILLAGE = MAIL, AFFE =(\n");
3226  if (geo->get_nb_mg_volume()>0)
3227  {
3228  fprintf(in,"_F(GROUP_MA=(");
3229  LISTE_MG_VOLUME::iterator itv;
3230  LISTE_MG_FACE::iterator itf;
3231  LISTE_MG_ARETE::iterator ita;
3232  for (MG_VOLUME *vol=geo->get_premier_volume(itv);vol!=NULL;vol=geo->get_suivant_volume(itv))
3233  fprintf(in,"'GMV%lu',",vol->get_id());
3234  for (MG_FACE *face=geo->get_premier_face(itf);face!=NULL;face=geo->get_suivant_face(itf))
3235  fprintf(in,"'GMF%lu',",face->get_id());
3236  for (MG_ARETE *are=geo->get_premier_arete(ita);are!=NULL;are=geo->get_suivant_arete(ita))
3237  fprintf(in,"'GMA%lu',",are->get_id());
3238  fprintf(in,"), PHENOMENE = 'MECANIQUE', MODELISATION = '3D' ,),\n");
3239  }
3240  if (geo->get_nb_mg_poutre()>0)
3241  {
3242  fprintf(in,"_F(GROUP_MA=(");
3243  LISTE_MG_POUTRE::iterator itp;
3244  for (MG_POUTRE *pou=geo->get_premier_poutre(itp);pou!=NULL;pou=geo->get_suivant_poutre(itp))
3245  fprintf(in,"'GMP%lu',",pou->get_id());
3246  fprintf(in,"'GMMINI',), PHENOMENE = 'MECANIQUE', MODELISATION = 'POU_D_E' ,),\n");
3247  }
3248  fprintf(in,"),);\n\n");
3249 
3250 }
3251 
3253 {
3254  fprintf(in,"MAIL2=CREA_MAILLAGE(MAILLAGE=MAIL,MODI_MAILLE=(_F(TOUT='OUI',OPTION='TRIA6_7',),),);\n\n");
3255  fprintf(in,"MODCAL=AFFE_MODELE(MAILLAGE = MAIL2, AFFE =_F(TOUT = 'OUI', PHENOMENE = 'MECANIQUE', MODELISATION = 'COQUE_3D',),);\n\n");
3256  fprintf(in,"MODORI=AFFE_MODELE(MAILLAGE = MAIL, AFFE =_F(TOUT = 'OUI', PHENOMENE = 'MECANIQUE', MODELISATION = '3D' ,),);\n\n");
3257 }
3258 
3259 void MG_EXPORT::aster_ecrire_comm_rigidite(FILE *in,bool coque)
3260 {
3261 fprintf(in,"# CALCUL DE LA MATRICE DE RIGIDITE------------------\n");
3262 if (!coque) fprintf(in,"mel = CALC_MATR_ELEM(OPTION = 'RIGI_MECA', MODELE = MODCAL,CHAM_MATER=CHMAT );\n");
3263 else fprintf(in,"mel = CALC_MATR_ELEM(OPTION = 'RIGI_MECA', MODELE = MODCAL,CHAM_MATER=CHMAT , CARA_ELEM=CARA_COQ, );\n");
3264 fprintf(in,"nu = NUME_DDL(MATR_RIGI = mel);\n");
3265 fprintf(in,"matas = ASSE_MATRICE (NUME_DDL = nu, MATR_ELEM = mel,);\n");
3266 }
3267 
3268 
3270 {
3271 fprintf(in,"# DEFINITION DES CARACTERISTIQUES DES ELEMENTS DE POUTRES\n");
3272 fprintf(in,"CARA_POU=AFFE_CARA_ELEM(MODELE=MODCAL,POUTRE=(\n");
3273 double dimcar=0.;
3274 for (int i=0;i<nbpoutre;i++) // Épaisseur des faces
3275  {
3276  MG_POUTRE* pou=geo->get_mg_poutre(i);
3277  double rr;
3278  bool resrr=pou->get_valeur_ccf((char*)"Rr",rr);
3279  if (resrr) {fprintf(in,"_F(GROUP_MA='GMP%lu',SECTION='CERCLE',CARA='R',VALE=%lf,),\n",pou->get_id(),rr);dimcar=dimcar+rr;continue;}
3280  double hx,hy;
3281  bool reshx=pou->get_valeur_ccf((char*)"Hx",hx);
3282  bool reshy=pou->get_valeur_ccf((char*)"Hy",hy);
3283  if ((reshx) && (reshy)) {fprintf(in,"_F(GROUP_MA='GMP%lu',SECTION='RECTANGLE',CARA=('Hx','Hy'),VALE=(%lf,%lf),),\n",pou->get_id(),hx,hy);dimcar=dimcar+0.5*hx+0.5*hy;continue;}
3284  }
3285 dimcar=dimcar/nbpoutre;
3287 for (FEM_ELEMENT1* ele=minipresent.get_premier(it);ele!=NULL;ele=minipresent.get_suivant(it))
3288  {
3289  int num=ele->get_numero();
3290  fprintf(in,"_F(MAILLE='M%d',SECTION='CERCLE',CARA='R',VALE=%lf,),\n",num,dimcar);
3291  }
3292 
3293 fprintf(in,"),\nORIENTATION=(\n");
3294 for (int i=0;i<nbpoutre;i++) // Épaisseur des faces
3295  {
3296  MG_POUTRE* pou=geo->get_mg_poutre(i);
3297  double cx,cy,cz;
3298  pou->get_valeur_ccf((char*)"Cx",cx);
3299  pou->get_valeur_ccf((char*)"Cy",cy);
3300  pou->get_valeur_ccf((char*)"Cz",cz);
3301  int num=pou->get_lien_fem_maillage()->get(0)->get_numero();
3302  FEM_NOEUD* no1=((FEM_ELEMENT1*)pou->get_lien_fem_maillage()->get(0))->get_fem_noeud(0);
3303  FEM_NOEUD* no2=((FEM_ELEMENT1*)pou->get_lien_fem_maillage()->get(0))->get_fem_noeud(1);
3304  OT_VECTEUR_3D vecx(no1->get_coord(),no2->get_coord());
3305  OT_VECTEUR_3D vecy(cx-no1->get_x(),cy-no1->get_y(),cz-no1->get_z());
3306  OT_VECTEUR_3D vecz=vecx&vecy;
3307  OT_VECTEUR_3D vecyy=vecz&vecx;
3308  vecyy.norme();
3309  fprintf(in,"_F(GROUP_MA='GMP%lu',CARA='VECT_Y', VALE=(%lf,%lf,%lf),),\n",pou->get_id(),vecyy.get_x(),vecyy.get_y(),vecyy.get_z());
3310  }
3311 for (FEM_ELEMENT1* ele=minipresent.get_premier(it);ele!=NULL;ele=minipresent.get_suivant(it))
3312  {
3313  int num=ele->get_numero();
3314  FEM_NOEUD* no1=ele->get_fem_noeud(0);
3315  FEM_NOEUD* no2=ele->get_fem_noeud(1);
3316  OT_VECTEUR_3D vecx(no1->get_coord(),no2->get_coord());
3317  OT_VECTEUR_3D vecy(1.,0.,0.);
3318  OT_VECTEUR_3D vecz=vecx&vecy;
3319  if (vecz.get_longueur()<1e-10)
3320  {
3321  OT_VECTEUR_3D vecy(0.,1.,0.);
3322  vecz=vecx&vecy;
3323  }
3324  OT_VECTEUR_3D vecyy=vecz&vecx;
3325  vecyy.norme();
3326  fprintf(in,"_F(MAILLE='M%d',CARA='VECT_Y', VALE=(%lf,%lf,%lf),),\n",num,vecyy.get_x(),vecyy.get_y(),vecyy.get_z());
3327  }
3328 
3329 fprintf(in,"),);\n\n");
3330 
3331 }
3332 
3333 void MG_EXPORT::aster_ecrire_comm_caracteristiques_coque(FILE *in,int nbcoque,MG_GEOMETRIE *geo,std::map<std::string,std::string> &listegroupedemaillexy)
3334 {
3335 fprintf(in,"# DEFINITION DES CARACTERISTIQUES DES ELEMENTS DE COQUES (EPAISSEUR, REPERE LOCAL (POST-TRAIT) ET NB DE COUCHES (1 EN ELASTICITE LINEAIRE))\n");
3336  fprintf(in,"CARA_COQ=AFFE_CARA_ELEM(MODELE=MODCAL,COQUE=(\n");
3337 
3338  for (int i=0;i<nbcoque;i++) // Épaisseur des faces
3339  {
3340  MG_COQUE* coque=geo->get_mg_coque(i);
3341  if (coque->est_une_topo_element())
3342  {
3343  int nbelement=((MG_COQUE_ELEMENT*)coque)->get_nb_element();
3344  std::map<unsigned long,unsigned long> facetraitee;
3345  for (int l=0;l<nbelement;l++) // pas terrible en efficacite VF juillet 2015
3346  {
3347  MG_ELEMENT_MAILLAGE* mgele=((MG_COQUE_ELEMENT*)coque)->get_element(l);
3348  MG_FACE* face=(MG_FACE*)mgele->get_lien_topologie();
3349  long unsigned id=face->get_id();
3350  if (facetraitee.find(id)!=facetraitee.end()) continue;
3351  facetraitee[id]=id;
3352  double epais=0.001; // Épaisseur par défaut
3353  face->get_valeur_ccf((char*)"ep",epais);
3354  char nomgroupex[500];
3355  char nomgroupey[500];
3356  sprintf(nomgroupex,"GMF%luX",id);
3357  sprintf(nomgroupey,"GMF%luY",id);
3358  std::map<std::string,std::string>::iterator it=listegroupedemaillexy.find(nomgroupex);
3359  // Si "nomgroupex" est écrit dans la liste, l'itérateur sera à la fin de la liste
3360  if (it!=listegroupedemaillexy.end())
3361  {
3362  fprintf(in,"_F(GROUP_MA='GMF%luX',EPAIS=%lf,VECTEUR=(1,0,0),),\n",id,epais);
3363  }
3364  it=listegroupedemaillexy.find(nomgroupey);
3365  if (it!=listegroupedemaillexy.end())
3366  {
3367  fprintf(in,"_F(GROUP_MA='GMF%luY',EPAIS=%lf,VECTEUR=(0,1,0),),\n",id,epais);
3368  }
3369  }
3370  }
3371  else
3372  {
3373  int nbcoquille=coque->get_nb_mg_coquille();
3374  for (int k=0;k<nbcoquille;k++)
3375  {
3376  MG_COQUILLE* coquille=coque->get_mg_coquille(k);
3377  int nbface=coquille->get_nb_mg_coface();
3378  for (int l=0;l<nbface;l++)
3379  {
3380  MG_FACE* face=coquille->get_mg_coface(l)->get_face();
3381  long unsigned id=face->get_id();
3382  double epais=0.001; // Épaisseur par défaut
3383  face->get_valeur_ccf((char*)"ep",epais);
3384 
3385  char nomgroupex[500];
3386  char nomgroupey[500];
3387  sprintf(nomgroupex,"GMF%luX",id);
3388  sprintf(nomgroupey,"GMF%luY",id);
3389  std::map<std::string,std::string>::iterator it=listegroupedemaillexy.find(nomgroupex);
3390  // Si "nomgroupex" est écrit dans la liste, l'itérateur sera à la fin de la liste
3391  if (it!=listegroupedemaillexy.end())
3392  {
3393  fprintf(in,"_F(GROUP_MA='GMF%luX',EPAIS=%lf,VECTEUR=(1,0,0),),\n",id,epais);
3394  }
3395  it=listegroupedemaillexy.find(nomgroupey);
3396  if (it!=listegroupedemaillexy.end())
3397  {
3398  fprintf(in,"_F(GROUP_MA='GMF%luY',EPAIS=%lf,VECTEUR=(0,1,0),),\n",id,epais);
3399  }
3400  }
3401  }
3402 
3403  }
3404 
3405  }
3406 fprintf(in,"),);\n\n");
3407 
3408 }
3409 
3410 void MG_EXPORT::aster_ecrire_comm_caracteristiques_volume(FILE *in,int nbvolume,MG_GEOMETRIE *geo,bool &volortho)
3411 {
3412  volortho=false;
3413  std::string aafficher="# DEFINITION DES CARACTERISTIQUES DES ELEMENTS DE VOLUMES\n";
3414  aafficher=aafficher + "CARA_VOL=AFFE_CARA_ELEM(MODELE=MODCAL,MASSIF=(\n";
3415  for (int i=0;i<nbvolume;i++)
3416  {
3417  MG_VOLUME* vol=geo->get_mg_volume(i);
3418  if (vol->est_orthotrope_mecanique()) volortho=true;
3419  double a1=0.;
3420  double a2=0.;
3421  double a3=0.;
3422  vol->get_valeur_ccf((char*)"a1",a1);
3423  vol->get_valeur_ccf((char*)"a2",a2);
3424  vol->get_valeur_ccf((char*)"a3",a3);
3425  char message[500];
3426  sprintf(message,"_F(GROUP_MA='GMV%lu',ANGL_EULER=(%lf,%lf,%lf),),\n",vol->get_id(),a1,a2,a3);
3427  aafficher=aafficher+message;
3428  }
3429 aafficher=aafficher+"),);\n\n";
3430 if (volortho==true)
3431  fprintf(in,"%s",aafficher.c_str());
3432 }
3433 
3434 void MG_EXPORT::aster_ecrire_comm_defi_materiau_elastique(FILE *in,int nbvol,int nbcoque,int nbpoutre,bool estortho,MG_GEOMETRIE *geo)
3435 {
3436  int base=(int)param_aster.get_valeur("Base_num_mail");
3437  OT_CHAINE ot;
3438  fprintf(in,"# DEFINITION DU MATERIAU UTILISE------------------------------------------------\n");
3439 
3440  for (int j=0;j<nbvol;j++) // Éléments volumiques
3441  {
3442  MG_VOLUME* vol=geo->get_mg_volume(j);
3443  if (estortho==false)
3444  {
3445  double E=210e9;
3446  double nu=0.3;
3447  double rho=1.;
3448  vol->get_valeur_ccf((char*)"Em",E);
3449  vol->get_valeur_ccf((char*)"nu",nu);
3450  vol->get_valeur_ccf((char*)"Ro",rho);
3451  fprintf(in,"P%s=DEFI_MATERIAU(ELAS=_F(E = %le, NU = %lf, RHO= %lf,),);\n",ot.get_base(vol->get_id(),base).c_str(),E,nu,rho);
3452  }
3453  else
3454  {
3455  double E1,E2,E3,G1,G2,G3,n1,n2,n3;
3456  vol->get_valeur_ccf((char*)"E1",E1);
3457  vol->get_valeur_ccf((char*)"n1",n1);
3458  vol->get_valeur_ccf((char*)"G1",G1);
3459  vol->get_valeur_ccf((char*)"E2",E2);
3460  vol->get_valeur_ccf((char*)"n2",n2);
3461  vol->get_valeur_ccf((char*)"G2",G2);
3462  vol->get_valeur_ccf((char*)"E3",E3);
3463  vol->get_valeur_ccf((char*)"n3",n3);
3464  vol->get_valeur_ccf((char*)"G3",G3);
3465  fprintf(in,"P%s=DEFI_MATERIAU(ELAS_ORTH=_F(E_L=%lf,E_T=%lf,E_N=%lf,G_LT=%lf,G_TN=%lf,G_LN=%lf,NU_LT=%lf,NU_TN=%lf,NU_LN=%lf,),);\n",ot.get_base(vol->get_id(),base).c_str(),E1,E2,E3,G1,G2,G3,n1,n2,n3);
3466 
3467  }
3468  }
3469  for (int j=0;j<nbcoque;j++) // Éléments de coques
3470  {
3471  MG_COQUE* coq=geo->get_mg_coque(j);
3472  double E=210e9;
3473  double nu=0.3;
3474  double rho=1.;
3475  coq->get_valeur_ccf((char*)"Em",E);
3476  coq->get_valeur_ccf((char*)"nu",nu);
3477  coq->get_valeur_ccf((char*)"Ro",rho);
3478  fprintf(in,"P%s=DEFI_MATERIAU(ELAS=_F(E = %le, NU = %lf, RHO= %lf,),);\n",ot.get_base(coq->get_id(),base).c_str(),E,nu,rho);
3479  }
3480  for (int j=0;j<nbpoutre;j++) // Éléments de coques
3481  {
3482  MG_POUTRE* pou=geo->get_mg_poutre(j);
3483  double E=210e9;
3484  double nu=0.3;
3485  double rho=1.;
3486  pou->get_valeur_ccf((char*)"Em",E);
3487  pou->get_valeur_ccf((char*)"nu",nu);
3488  pou->get_valeur_ccf((char*)"Ro",rho);
3489  fprintf(in,"P%s=DEFI_MATERIAU(ELAS=_F(E = %le, NU = %lf, RHO= %lf,),);\n",ot.get_base(pou->get_id(),base).c_str(),E,nu,rho);
3490  }
3491  if ((nbvol>0) && (nbpoutre>0))
3492  {
3493  double valinifini=param_aster.get_valeur("Infini");
3494  fprintf(in,"MA_MINI=DEFI_MATERIAU(ELAS=_F(E = %le, NU = 0.3, RHO= 1000,),);\n",valinifini);
3495 
3496  }
3497  fprintf(in,"\n");
3498 }
3499 
3501 {
3502  int base=(int)param_aster.get_valeur("Base_num_mail");
3503  OT_CHAINE ot;
3504  fprintf(in,"# DEFINITION DU MATERIAU UTILISE------------------------------------------------\n");
3505 
3506  for (int j=0;j<nbvol;j++) // Éléments volumiques
3507  {
3508  MG_VOLUME* vol=geo->get_mg_volume(j);
3509  double E=210e9;
3510  double nu=0.3;
3511  double rho=1.;
3512  vol->get_valeur_ccf((char*)"Em",E);
3513  vol->get_valeur_ccf((char*)"nu",nu);
3514  vol->get_valeur_ccf((char*)"Ro",rho);
3515  for (int i=1;i<=niveaumax;i++)
3516  fprintf(in,"P%s=DEFI_MATERIAU(ELAS=_F(E = %le, NU = %lf, RHO= %le,),);\n",ot.get_base(i,base).c_str(),E*pow(i*1./niveaumax,penal),nu,rho*i*1.0/niveaumax);
3517  }
3518 }
3519 
3521 {
3522 int base=(int)param_aster.get_valeur("Base_num_mail");
3523 OT_CHAINE ot;
3524 fprintf(in,"# DEFINITION DU MATERIAU UTILISE------------------------------------------------\n");
3525 char formulation;
3526  int NONLINEAIRE=param_aster.get_valeur("nonlineaire");
3527  for (int j=0;j<nbvol;j++) // Éléments volumiques
3528  {
3529  MG_VOLUME* vol=geo->get_mg_volume(j);
3530  double LAMBDA=0.3;
3531  double CP=2300;
3532  double RHO=0.92;
3533  int corr=1;
3534  vol->get_valeur_ccf((char*)"Kx",LAMBDA);
3535  vol->get_valeur_ccf((char*)"Cp",CP);
3536  vol->get_valeur_ccf((char*)"Ro",RHO);
3537  vol->get_formulation_ccf((char*)"Kx",formulation);
3538  form=formulation;
3539  if(formulation=='N')
3540  fprintf(in,"P%s=DEFI_MATERIAU(THER=_F(LAMBDA = %le, RHO_CP= %lf,),);\n\n",ot.get_base(vol->get_id(),base).c_str(),corr*LAMBDA,corr*RHO*CP);
3541  if(formulation=='I')
3542  {
3544  double val_Cond=0;
3545  geo->get_mg_volume(j)->get_valeur_ccf((char*)"Kx",val_Cond);
3546  char chr_nom_fonction[8];
3547  sprintf(chr_nom_fonction,"%d",(int)val_Cond);
3548  std::string str_nom_fonction = chr_nom_fonction;
3549  MG_VOLUME* vol=geo->get_mg_volume(j);
3550  fprintf(in,"CONST=DEFI_CONSTANTE(VALE=%lf);\n\n",corr*RHO*CP);
3551  if (NONLINEAIRE==1)
3552  fprintf(in,"P%s=DEFI_MATERIAU(THER_NL=_F(LAMBDA = F%s, RHO_CP= CONST,),);\n\n",ot.get_base(vol->get_id(),base).c_str(),str_nom_fonction.c_str());
3553  else
3554  fprintf(in,"P%s=DEFI_MATERIAU(THER_FO=_F(LAMBDA = F%s, RHO_CP= CONST,),);\n\n",ot.get_base(vol->get_id(),base).c_str(),str_nom_fonction.c_str());
3555  }
3556 
3557  }
3558 }
3559 
3560 void MG_EXPORT::aster_ecrire_comm_defi_materiau_elastique_volume_fatigue(FILE *in,int nbvol,MG_GEOMETRIE *geo,int niveaumax,int penal)
3561 {
3562  fprintf(in,"# DEFINITION DU MATERIAU UTILISE------------------------------------------------\n");
3563 
3564  for (int j=0;j<nbvol;j++) // Éléments volumiques
3565  {
3566  MG_GEOM_FONCTION *fonction;
3567  double val_CM;
3568  for (int i=1;i<=niveaumax;i++)
3569  {
3570  val_CM=geo->get_mg_geom_fonction((int)i-1)->get_id();
3571  char chr_nom_fonction[8];
3572  sprintf(chr_nom_fonction,"%d",(int)val_CM);
3573  std::string str_nom_fonction = chr_nom_fonction;
3574  str_nom_fonction = "cm" + str_nom_fonction;
3575  fonction = geo->get_mg_geom_fonctionid((int)val_CM);
3576  fprintf(in,"\%s = DEFI_FONCTION(NOM_PARA = 'EPSI',\n\
3577  NOM_RESU = 'SIGM',\n\
3578  INTERPOL = 'LIN',\n\
3579  PROL_DROITE = 'LINEAIRE',\n\
3580  PROL_GAUCHE = 'CONSTANT',\n\
3581  VALE = (",str_nom_fonction.c_str());
3582  double coo[2];
3583  fonction->get_point(0,coo);
3584  fprintf(in,"%lf,%lf,\n",coo[0],coo[1]);
3585  for(long k=1;k<fonction->get_nb_point();k++)
3586  {
3587  fonction->get_point(k,coo);
3588  fprintf(in," %lf,%lf,\n",coo[0],coo[1]);
3589  }
3590  fprintf(in," ),);\n\n");
3591  MG_VOLUME* vol=geo->get_mg_volume(j);
3592  double E=210e9;
3593  double nu=0.3;
3594  double rho=1.;
3595  vol->get_valeur_ccf((char*)"Em",E);
3596  vol->get_valeur_ccf((char*)"nu",nu);
3597  vol->get_valeur_ccf((char*)"Ro",rho);
3598  fprintf(in,"MA_%d=DEFI_MATERIAU(ELAS=_F(E = %le, NU = %lf, RHO= %lf,),\n\
3599  TRACTION = _F(SIGM = %s,),);\n\n",i,E,nu,rho,str_nom_fonction.c_str());
3600 
3601 
3602  }
3603 
3604  }
3605 }
3606 
3607 
3609 {
3610 int base=(int)param_aster.get_valeur("Base_num_mail");
3611 OT_CHAINE ot;
3612  fprintf(in,"# DEFINITION DU MATERIAU UTILISE------------------------------------------------\n");
3613  for (int j=0;j<nbvol;j++) // Éléments volumiques
3614  {
3615  MG_VOLUME* vol=geo->get_mg_volume(j);
3616  double E=210e9;
3617  double nu=0.3;
3618  double rho=1.;
3619  double Et = 100e9;
3620  double Re = 100e6;
3621  vol->get_valeur_ccf((char*)"Em",E);
3622  vol->get_valeur_ccf((char*)"nu",nu);
3623  vol->get_valeur_ccf((char*)"Ro",rho);
3624  vol->get_valeur_ccf((char*)"Et",Et);
3625  vol->get_valeur_ccf((char*)"Re",Re);
3626  fprintf(in,"P%s=\
3627  DEFI_MATERIAU(ELAS=_F(E = %le, NU = %lf, RHO= %lf,),\n\
3628  ECRO_LINE = _F(D_SIGM_EPSI = %lf,SY = %lf,),);\n\n",ot.get_base(vol->get_id(),base).c_str(),E,nu,rho,Et,Re);
3629 
3630  }
3631  for (int j=0;j<nbcoque;j++) // Éléments de coques
3632  {
3633  MG_COQUE* coq=geo->get_mg_coque(j);
3634  double E=210e9;
3635  double nu=0.3;
3636  double rho=1.;
3637  double Et = 100e9;
3638  double Re = 100e6;
3639  coq->get_valeur_ccf((char*)"Em",E);
3640  coq->get_valeur_ccf((char*)"nu",nu);
3641  coq->get_valeur_ccf((char*)"Ro",rho);
3642  coq->get_valeur_ccf((char*)"Et",Et);
3643  coq->get_valeur_ccf((char*)"Re",Re);
3644  fprintf(in,"P%s=\
3645  DEFI_MATERIAU(ELAS=_F(E = %le, NU = %lf, RHO= %lf,),\n\
3646  ECRO_LINE = _F(D_SIGM_EPSI = %lf,SY = %lf,),);\n\n",ot.get_base(coq->get_id(),base).c_str(),E,nu,rho,Et,Re);
3647  }
3648 
3649 }
3650 
3652 {
3653 int base=(int)param_aster.get_valeur("Base_num_mail");
3654 OT_CHAINE ot;
3655  fprintf(in,"# DEFINITION DU MATERIAU UTILISE------------------------------------------------\n");
3656 
3658  for (int j=0;j<nbvol;j++) // Éléments volumiques
3659  {
3660  double val_CM=-1;
3661  geo->get_mg_volume(j)->get_valeur_ccf((char*)"CM",val_CM);
3662  if (!(val_CM>0))
3663  {
3664  geo->get_mg_volume(j)->get_valeur_ccf((char*)"cm",val_CM);
3665  val_CM=geo->get_mg_geom_fonction((int)val_CM-1)->get_id();
3666  }
3667  char chr_nom_fonction[8];
3668  sprintf(chr_nom_fonction,"%d",(int)val_CM);
3669  std::string str_nom_fonction = chr_nom_fonction;
3670  str_nom_fonction = "cm" + str_nom_fonction;
3671  MG_VOLUME* vol=geo->get_mg_volume(j);
3672  double E=210e9;
3673  double nu=0.3;
3674  double rho=1.;
3675  vol->get_valeur_ccf((char*)"Em",E);
3676  vol->get_valeur_ccf((char*)"nu",nu);
3677  vol->get_valeur_ccf((char*)"Ro",rho);
3678  fprintf(in,"P%s=\
3679 DEFI_MATERIAU(ELAS=_F(E = %le, NU = %lf, RHO= %lf,),\n\
3680  TRACTION = _F(SIGM = %s,),);\n\n",ot.get_base(vol->get_id(),base).c_str(),E,nu,rho,str_nom_fonction.c_str());
3681  }
3682 }
3683 
3684 
3685 void MG_EXPORT::aster_ecrire_comm_affe_materiau(FILE *in,std::string maillage,int nbvol,int nbcoque,int nbpoutre,MG_GEOMETRIE *geo,std::string carac)
3686 {
3687 int base=(int)param_aster.get_valeur("Base_num_mail");
3688 OT_CHAINE ot;
3689 fprintf(in,"# AFFECTATION DU MATERIAU AU MAILLAGE-------------------------------------------\n");
3690 fprintf(in,"CHMAT=AFFE_MATERIAU(MAILLAGE=%s, AFFE = (\n",maillage.c_str());
3691  for (int j=0;j<nbvol;j++) // Éléments volumiques
3692  {
3693  MG_VOLUME* vol=geo->get_mg_volume(j);
3694  fprintf(in,"_F(GROUP_MA='GMV%lu',MATER= %s%s ),\n",vol->get_id(),carac.c_str(),ot.get_base(vol->get_id(),base).c_str());
3695  }
3696  for (int j=0;j<nbcoque;j++) // Éléments de coques
3697  {
3698  MG_COQUE* coq=geo->get_mg_coque(j);
3699  fprintf(in,"_F(GROUP_MA='GMC%lu',MATER= %s%s ),\n",coq->get_id(),carac.c_str(),ot.get_base(coq->get_id(),base).c_str());
3700  }
3701  for (int j=0;j<nbpoutre;j++) // Éléments de coques
3702  {
3703  MG_POUTRE* pou=geo->get_mg_poutre(j);
3704  fprintf(in,"_F(GROUP_MA='GMP%lu',MATER= %s%s ),\n",pou->get_id(),carac.c_str(),ot.get_base(pou->get_id(),base).c_str());
3705  }
3706  if ((nbvol>0) && (nbpoutre>0))
3707  fprintf(in,"_F(GROUP_MA='GMMINI',MATER= MA_MINI ),\n");
3708 
3709 fprintf(in,"),);\n\n");
3710 }
3711 
3712 void MG_EXPORT::aster_ecrire_comm_affe_materiau_iteratif(FILE *in,std::string maillage,int nbvol,int nbcoque,MG_GEOMETRIE *geo)
3713 {
3714 int base=(int)param_aster.get_valeur("Base_num_mail");
3715 OT_CHAINE ot;
3716 double VALE;
3717 VALE=param_aster.get_valeur("Tref");
3718 fprintf(in,"# AFFECTATION DU MATERIAU AU MAILLAGE-------------------------------------------\n");
3719 fprintf(in," CHMAT=AFFE_MATERIAU(MAILLAGE=%s, AFFE = (\n",maillage.c_str());
3720  for (int j=0;j<nbvol;j++) // Éléments volumiques
3721  {
3722  double val_Cond=0;
3723  MG_VOLUME* vol=geo->get_mg_volume(j);
3724  geo->get_mg_volume(j)->get_valeur_ccf((char*)"Kx",val_Cond);
3725  char chr_nom_fonction[8];
3726  sprintf(chr_nom_fonction,"%d",(int)val_Cond);
3727  std::string str_nom_fonction = chr_nom_fonction;
3728  fprintf(in," _F(GROUP_MA='GMV%lu',MATER= P%s ),),AFFE_VARC=(_F(TOUT='OUI',EVOL=temp1,NOM_VARC='TEMP',VALE_REF=%lf,),)\n",vol->get_id(),ot.get_base(vol->get_id(),base).c_str(),VALE);
3729  }
3730 
3731 fprintf(in," );\n\n");
3732 }
3733 
3734 void MG_EXPORT::aster_ecrire_comm_affe_materiau_optimisation_topo(FILE *in,int niveaumax,std::vector<FEM_ELEMENT3*> *lst)
3735 {
3736 int base=(int)param_aster.get_valeur("Base_num_mail");
3737 OT_CHAINE ot;
3738 fprintf(in,"# AFFECTATION DU MATERIAU AU MAILLAGE-------------------------------------------\n");
3739 fprintf(in,"CHMAT=AFFE_MATERIAU(MAILLAGE=MAIL, AFFE = (\n");
3740 for (int i=1;i<=niveaumax;i++)
3741  {
3742  int nbelement=lst[i].size();
3743  if (nbelement==0) continue;
3744  fprintf(in,"_F(GROUP_MA='GM_%d',MATER= P%s ),\n",i,ot.get_base(i,base).c_str());
3745  }
3746 fprintf(in,"),);\n\n");
3747 }
3748 
3749 
3750 
3751 
3752 void MG_EXPORT::aster_ecrire_comm_condition_limite(FILE *in,MG_GEOMETRIE* geo,bool effort,bool blocage, bool thermique,bool stat_non_line,bool volume,bool coque,bool avec3d,std::vector<std::string> &chargepresente,std::map<unsigned long,unsigned long> &gnexistant)
3753 {
3754 fprintf(in,"# DEFINITION DES CONDITIONS AUX LIMITES----------------------------------------\n\n");
3755 if (effort)
3756  {
3757  fprintf(in,"# ----- EFFORTS -------------------------\n");
3758  aster_ecrire_comm_condition_limite_force_pontuelle(in,geo,avec3d,stat_non_line,chargepresente);
3759  aster_ecrire_comm_condition_limite_force_lineique(in,geo,avec3d,stat_non_line,chargepresente);
3760  if ((avec3d) && (volume)) aster_ecrire_comm_condition_limite_force_surface_volume(in,geo,stat_non_line,chargepresente);
3761  if ((avec3d) && (coque)) aster_ecrire_comm_condition_limite_force_surface_coque(in,geo,stat_non_line,chargepresente);
3762  if (avec3d) aster_ecrire_comm_condition_limite_force_normale_3d(in,geo,coque,stat_non_line,chargepresente);
3763  if (!avec3d) aster_ecrire_comm_condition_limite_force_normale_2d(in,geo,stat_non_line,chargepresente);
3764  }
3765 if (blocage)
3766  {
3767  fprintf(in,"\n# ----- DEPLACEMENTS IMPOSES ----------\n");
3768  aster_ecrire_comm_condition_limite_blocage(in,geo,coque,avec3d,stat_non_line,chargepresente,gnexistant);
3769  }
3770 if (thermique)
3771  {
3772  aster_ecrire_comm_condition_limite_temperature(in,geo,chargepresente,gnexistant);
3773  aster_ecrire_comm_condition_limite_flux_thermique(in,geo,chargepresente);
3774  }
3775 }
3776 
3777 
3778 void MG_EXPORT::aster_ecrire_comm_condition_limite_force_pontuelle(FILE *in,MG_GEOMETRIE* geo,bool avec3d,bool stat_non_line,std::vector<std::string> &chargepresente)
3779 {
3780  std::vector<std::string> listccf_group_noeud;
3781  std::vector<std::string> listccf_f_group_noeud;
3782  std::vector<std::string> list_fonction;
3783  double precision = geo->get_valeur_precision();
3784  LISTE_MG_SOMMET::iterator it_som;
3785  fprintf(in,"# ----- FORCE PONCTUELLE-------------------\n");
3786  for (MG_SOMMET* som=geo->get_premier_sommet(it_som);som;som=geo->get_suivant_sommet(it_som))
3787  {
3788  std::string strlistccf;
3789  std::string strlistccf_f;
3790  std::string strfonction;
3791  double valx,valy,valz;
3792  bool resx=som->get_valeur_ccf((char*)"Fx",valx);
3793  bool resy=som->get_valeur_ccf((char*)"Fy",valy);
3794  bool resz=som->get_valeur_ccf((char*)"Fz",valz);
3795  if (resx)
3796  {
3797  aster_ecrire_comm_condition_limite_blocage_force_temperature(som,(char*)"Fx",(char*)"FX",precision,stat_non_line,strlistccf,strlistccf_f,strfonction);
3798  }
3799  if (resy)
3800  {
3801  aster_ecrire_comm_condition_limite_blocage_force_temperature(som,(char*)"Fy",(char*)"FY",precision,stat_non_line,strlistccf,strlistccf_f,strfonction);
3802  }
3803  if ((resz) && (avec3d))
3804  {
3805  aster_ecrire_comm_condition_limite_blocage_force_temperature(som,(char*)"Fz",(char*)"FZ",precision,stat_non_line,strlistccf,strlistccf_f,strfonction);
3806  }
3807  bool somnoeud=false;
3808  if (som->est_une_topo_element())
3809  {
3810  somnoeud=true;
3811  MG_SOMMET_NOEUD* somno=(MG_SOMMET_NOEUD*)som;
3812  MG_NOEUD* no=somno->get_mg_noeud();
3813  if (no->get_lien_topologie()==somno) somnoeud=false;;
3814  }
3815  if ((!somnoeud) || (geo->est_virtuelle()))
3816  {
3817  char chr_id[10];
3818  sprintf(chr_id,"%ld",som->get_id());
3819  std::string str_id = chr_id;
3820  if(strlistccf.size()!=0)
3821  {
3822  strlistccf = "_F(GROUP_NO='GNS" + str_id + "'," + strlistccf +"),";
3823  listccf_group_noeud.insert(listccf_group_noeud.end(),strlistccf);
3824  }
3825  if(strfonction.size()!=0)
3826  {
3827  strlistccf_f = "_F(GROUP_NO='GNS" + str_id + "'," + strlistccf_f +"),";
3828  listccf_f_group_noeud.insert(listccf_f_group_noeud.end(),strlistccf_f);
3829  list_fonction.insert(list_fonction.end(),strfonction);
3830  }
3831  }
3832  else
3833  {
3834  char chr_id[10];
3835  sprintf(chr_id,"%d",((MG_SOMMET_NOEUD*)som)->get_num_interne());
3836  std::string str_id = chr_id;
3837  if(strlistccf.size()!=0)
3838  {
3839  strlistccf = "_F(GROUP_NO='GNN" + str_id + "'," + strlistccf +"),";
3840  listccf_group_noeud.insert(listccf_group_noeud.end(),strlistccf);
3841  }
3842  if(strfonction.size()!=0)
3843  {
3844  strlistccf_f = "_F(GROUP_NO='GNN" + str_id + "'," + strlistccf_f +"),";
3845  listccf_f_group_noeud.insert(listccf_f_group_noeud.end(),strlistccf_f);
3846  list_fonction.insert(list_fonction.end(),strfonction);
3847  }
3848  }
3849  }
3850  if(list_fonction.size()!=0)
3851  {
3852  for(int k=0;k<list_fonction.size();k++) fprintf(in,"%s\n",list_fonction[k].c_str());
3853  fprintf(in,"\n\n");
3854  }
3855  if(listccf_f_group_noeud.size()!=0)
3856  {
3857  chargepresente.push_back("FORCE_PF");
3858  fprintf(in,"FORCE_PF = AFFE_CHAR_MECA_F (MODELE = MODCAL, FORCE_NODALE = (\n");
3859  for(int k=0;k<listccf_f_group_noeud.size();k++) fprintf(in,"%s\n",listccf_f_group_noeud[k].c_str());
3860  fprintf(in,"),);\n\n");
3861  }
3862  if(listccf_group_noeud.size()!=0)
3863  {
3864  chargepresente.push_back("FORCE_P");
3865  fprintf(in,"FORCE_P = AFFE_CHAR_MECA (MODELE = MODCAL, FORCE_NODALE = (\n");
3866  for(int k=0;k<listccf_group_noeud.size();k++) fprintf(in,"%s\n",listccf_group_noeud[k].c_str());
3867  fprintf(in,"),);\n\n");
3868  }
3869 }
3870 
3871 void MG_EXPORT::aster_ecrire_comm_condition_limite_force_lineique(FILE *in,MG_GEOMETRIE* geo,bool avec3d,bool stat_non_line,std::vector<std::string> &chargepresente)
3872 {
3873  fprintf(in,"# ----- FORCE LINEIQUE-------------------\n");
3874  std::vector<std::string> listccf_group_noeud;
3875  std::vector<std::string> listccf_f_group_noeud;
3876  std::vector<std::string> list_fonction;
3877  double precision = geo->get_valeur_precision();
3878  LISTE_MG_ARETE::iterator it_arete;
3879  for (MG_ARETE* arete=geo->get_premier_arete(it_arete);arete!=NULL;arete=geo->get_suivant_arete(it_arete))
3880  {
3881  std::string strlistccf;
3882  std::string strlistccf_f;
3883  std::string strfonction;
3884  double valx,valy,valz;
3885  bool resx=arete->get_valeur_ccf((char*)"Px",valx);
3886  bool resy=arete->get_valeur_ccf((char*)"Py",valy);
3887  bool resz=arete->get_valeur_ccf((char*)"Pz",valz);
3888  if (resx)
3889  {
3890  aster_ecrire_comm_condition_limite_blocage_force_temperature(arete,(char*)"Px",(char*)"FX",precision,stat_non_line,strlistccf,strlistccf_f,strfonction);
3891  }
3892  if (resy)
3893  {
3894  aster_ecrire_comm_condition_limite_blocage_force_temperature(arete,(char*)"Py",(char*)"FY",precision,stat_non_line,strlistccf,strlistccf_f,strfonction);
3895  }
3896  if ((resz) && (avec3d))
3897  {
3898  aster_ecrire_comm_condition_limite_blocage_force_temperature(arete,(char*)"Pz",(char*)"FZ",precision,stat_non_line,strlistccf,strlistccf_f,strfonction);
3899  }
3900  char chr_id[10];
3901  sprintf(chr_id,"%ld",arete->get_id());
3902  std::string str_id = chr_id;
3903  if(strlistccf.size()!=0)
3904  {
3905  strlistccf = "_F(GROUP_MA='GMA" + str_id + "'," + strlistccf +"),";
3906  listccf_group_noeud.insert(listccf_group_noeud.end(),strlistccf);
3907  }
3908  if(strfonction.size()!=0)
3909  {
3910  strlistccf_f = "_F(GROUP_MA='GMA" + str_id + "'," + strlistccf_f +"),";
3911  listccf_f_group_noeud.insert(listccf_f_group_noeud.end(),strlistccf_f);
3912  list_fonction.insert(list_fonction.end(),strfonction);
3913  }
3914  }
3915  if(list_fonction.size()!=0)
3916  {
3917  for(int k=0;k<list_fonction.size();k++) fprintf(in,"%s\n",list_fonction[k].c_str());
3918  fprintf(in,"\n\n");
3919  }
3920  if(listccf_f_group_noeud.size()!=0)
3921  {
3922  if (avec3d)
3923  {
3924  chargepresente.push_back("FORCE_LF");
3925  fprintf(in,"FORCE_LF = AFFE_CHAR_MECA_F (MODELE = MODCAL, FORCE_ARETE = (\n");
3926  for(int k=0;k<listccf_f_group_noeud.size();k++) fprintf(in,"%s\n",listccf_f_group_noeud[k].c_str());
3927  fprintf(in,"),);\n\n");
3928  }
3929  else
3930  {
3931  chargepresente.push_back("FORCE_CF");
3932  fprintf(in,"FORCE_CF = AFFE_CHAR_MECA_F (MODELE = MODCAL, FORCE_CONTOUR = (\n");
3933  for(int k=0;k<listccf_f_group_noeud.size();k++) fprintf(in,"%s\n",listccf_f_group_noeud[k].c_str());
3934  fprintf(in,"),);\n\n");
3935  }
3936  }
3937  if(listccf_group_noeud.size()!=0)
3938  {
3939  if (avec3d)
3940  {
3941  chargepresente.push_back("FORCE_L");
3942  fprintf(in,"FORCE_L = AFFE_CHAR_MECA (MODELE = MODCAL, FORCE_ARETE = (\n");
3943  for(int k=0;k<listccf_group_noeud.size();k++) fprintf(in,"%s\n",listccf_group_noeud[k].c_str());
3944  fprintf(in,"),);\n\n");
3945  }
3946  else
3947  {
3948  chargepresente.push_back("FORCE_C");
3949  fprintf(in,"FORCE_C = AFFE_CHAR_MECA (MODELE = MODCAL, FORCE_CONTOUR = (\n");
3950  for(int k=0;k<listccf_group_noeud.size();k++) fprintf(in,"%s\n",listccf_group_noeud[k].c_str());
3951  fprintf(in,"),);\n\n");
3952  }
3953  }
3954 }
3955 
3956 
3957 
3958 
3959 void MG_EXPORT::aster_ecrire_comm_condition_limite_force_surface_volume(FILE *in,MG_GEOMETRIE* geo,bool stat_non_line,std::vector<std::string> &chargepresente)
3960 {
3961  fprintf(in,"# ----- FORCE SURFACIQUE-------------------\n");
3962  std::vector<std::string> listccf_group_noeud;
3963  std::vector<std::string> listccf_f_group_noeud;
3964  std::vector<std::string> list_fonction;
3965  double precision = geo->get_valeur_precision();
3966  LISTE_MG_FACE::iterator it_face;
3967  for(MG_FACE* face=geo->get_premier_face(it_face);face!=NULL;face=geo->get_suivant_face(it_face))
3968  {
3969  std::string strlistccf;
3970  std::string strlistccf_f;
3971  std::string strfonction;
3972  double valx,valy,valz;
3973  bool resx=face->get_valeur_ccf((char*)"Px",valx);
3974  bool resy=face->get_valeur_ccf((char*)"Py",valy);
3975  bool resz=face->get_valeur_ccf((char*)"Pz",valz);
3976  if (resx)
3977  {
3978  aster_ecrire_comm_condition_limite_blocage_force_temperature(face,(char*)"Px",(char*)"FX",precision,stat_non_line,strlistccf,strlistccf_f,strfonction);
3979  }
3980  if (resy)
3981  {
3982  aster_ecrire_comm_condition_limite_blocage_force_temperature(face,(char*)"Py",(char*)"FY",precision,stat_non_line,strlistccf,strlistccf_f,strfonction);
3983  }
3984  if (resz)
3985  {
3986  aster_ecrire_comm_condition_limite_blocage_force_temperature(face,(char*)"Pz",(char*)"FZ",precision,stat_non_line,strlistccf,strlistccf_f,strfonction);
3987  }
3988  char chr_id[10];
3989  sprintf(chr_id,"%ld",face->get_id());
3990  std::string str_id = chr_id;
3991  if(strlistccf.size()!=0)
3992  {
3993  strlistccf = "_F(GROUP_MA='GMF" + str_id + "'," + strlistccf +"),";
3994  listccf_group_noeud.insert(listccf_group_noeud.end(),strlistccf);
3995  }
3996  if(strfonction.size()!=0)
3997  {
3998  strlistccf_f = "_F(GROUP_MA='GMF" + str_id + "'," + strlistccf_f +"),";
3999  listccf_f_group_noeud.insert(listccf_f_group_noeud.end(),strlistccf_f);
4000  list_fonction.insert(list_fonction.end(),strfonction);
4001  }
4002  }
4003  if(list_fonction.size()!=0)
4004  {
4005  for(int k=0;k<list_fonction.size();k++) fprintf(in,"%s\n",list_fonction[k].c_str());
4006  fprintf(in,"\n\n");
4007  }
4008  if(listccf_f_group_noeud.size()!=0)
4009  {
4010  chargepresente.push_back("FORCE_FF");
4011  fprintf(in,"FORCE_FF = AFFE_CHAR_MECA_F (MODELE = MODCAL, FORCE_FACE = (\n");
4012  for(int k=0;k<listccf_f_group_noeud.size();k++) fprintf(in,"%s\n",listccf_f_group_noeud[k].c_str());
4013  fprintf(in,"),);\n\n");
4014  }
4015  if(listccf_group_noeud.size()!=0)
4016  {
4017  chargepresente.push_back("FORCE_F");
4018  fprintf(in,"FORCE_F = AFFE_CHAR_MECA (MODELE = MODCAL, FORCE_FACE = (\n");
4019  for(int k=0;k<listccf_group_noeud.size();k++) fprintf(in,"%s\n",listccf_group_noeud[k].c_str());
4020  fprintf(in,"),);\n\n");
4021  }
4022 }
4023 
4024 void MG_EXPORT::aster_ecrire_comm_condition_limite_force_surface_coque(FILE *in,MG_GEOMETRIE* geo,bool stat_non_line,std::vector<std::string> &chargepresente)
4025 {
4026 fprintf(in,"# ----- FORCE SURFACIQUE-------------------\n");
4027 std::vector<std::string> listccf_group_noeud;
4028 std::vector<std::string> listccf_f_group_noeud;
4029 std::vector<std::string> list_fonction;
4030 double precision = geo->get_valeur_precision();
4031 LISTE_MG_FACE::iterator it;
4032 for (MG_FACE* face=geo->get_premier_face(it);face!=NULL;face=geo->get_suivant_face(it))
4033  {
4034  std::vector<std::string> listccf;
4035  double valx,valy,valz;
4036  bool resx=face->get_valeur_ccf((char*)"Px",valx);
4037  bool resy=face->get_valeur_ccf((char*)"Py",valy);
4038  bool resz=face->get_valeur_ccf((char*)"Pz",valz);
4039  std::string strlistccf;
4040  std::string strlistccf_f;
4041  std::string strfonction;
4042  if (resx)
4043  {
4044  aster_ecrire_comm_condition_limite_blocage_force_temperature(face,(char*)"Px",(char*)"FX",precision,stat_non_line,strlistccf,strlistccf_f,strfonction);
4045  }
4046  if (resy)
4047  {
4048  aster_ecrire_comm_condition_limite_blocage_force_temperature(face,(char*)"Py",(char*)"FY",precision,stat_non_line,strlistccf,strlistccf_f,strfonction);
4049  }
4050  if (resz)
4051  {
4052  aster_ecrire_comm_condition_limite_blocage_force_temperature(face,(char*)"Pz",(char*)"FZ",precision,stat_non_line,strlistccf,strlistccf_f,strfonction);
4053  }
4054  char chr_id[10];
4055  sprintf(chr_id,"%ld",face->get_id());
4056  std::string str_id = chr_id;
4057  if(strlistccf.size()!=0)
4058  {
4059  strlistccf = "_F(GROUP_MA='GMF" + str_id + "'," + strlistccf +"),";
4060  listccf_group_noeud.insert(listccf_group_noeud.end(),strlistccf);
4061  }
4062  if(strfonction.size()!=0)
4063  {
4064  strlistccf_f = "_F(GROUP_MA='GMF" + str_id + "'," + strlistccf_f +"),";
4065  listccf_f_group_noeud.insert(listccf_f_group_noeud.end(),strlistccf_f);
4066  list_fonction.insert(list_fonction.end(),strfonction);
4067  }
4068  }
4069 
4070 if(list_fonction.size()!=0)
4071 {
4072  for(int k=0;k<list_fonction.size();k++) fprintf(in,"%s\n",list_fonction[k].c_str());
4073  fprintf(in,"\n\n");
4074 }
4075 if(listccf_f_group_noeud.size()!=0)
4076 {
4077  chargepresente.push_back("F_COF");
4078  fprintf(in,"F_COF = AFFE_CHAR_MECA_F (MODELE = MODCAL, FORCE_COQUE = (\n");
4079  for(int k=0;k<listccf_f_group_noeud.size();k++) fprintf(in,"%s\n",listccf_f_group_noeud[k].c_str());
4080  fprintf(in,"),);\n\n");
4081 }
4082 if(listccf_group_noeud.size()!=0)
4083 {
4084  chargepresente.push_back("FORCE_CO");
4085  fprintf(in,"FORCE_CO = AFFE_CHAR_MECA (MODELE = MODCAL, FORCE_COQUE = (\n");
4086  for(int k=0;k<listccf_group_noeud.size();k++) fprintf(in,"%s\n",listccf_group_noeud[k].c_str());
4087  fprintf(in,"),);\n\n");
4088 }
4089 }
4090 
4091 void MG_EXPORT::aster_ecrire_comm_condition_limite_force_normale_3d(FILE *in,MG_GEOMETRIE* geo,bool coque,bool stat_non_line,std::vector<std::string> &chargepresente)
4092 {
4093  fprintf(in,"# ----- FORCE NORMALE-------------------\n");
4094  std::vector<std::string> listccf_group_noeud;
4095  std::vector<std::string> listccf_f_group_noeud;
4096  std::vector<std::string> list_fonction;
4097  double precision = geo->get_valeur_precision();
4098  LISTE_MG_FACE::iterator it;
4099  for (MG_FACE* face=geo->get_premier_face(it);face!=NULL;face=geo->get_suivant_face(it))
4100  {
4101  std::string strlistccf;
4102  std::string strlistccf_f;
4103  std::string strfonction;
4104  double val;
4105  bool res=face->get_valeur_ccf((char*)"Pn",val);
4106  if (res)
4107  {
4108  aster_ecrire_comm_condition_limite_blocage_force_temperature(face,(char*)"Pn",(char*)"PRES",precision,stat_non_line,strlistccf,strlistccf_f,strfonction);
4109  }
4110  char chr_id[10];
4111  sprintf(chr_id,"%ld",face->get_id());
4112  std::string str_id = chr_id;
4113  if(strlistccf.size()!=0)
4114  {
4115  strlistccf = "_F(GROUP_MA='GMF" + str_id + "'," + strlistccf +"),";
4116  listccf_group_noeud.insert(listccf_group_noeud.end(),strlistccf);
4117  }
4118  if(strfonction.size()!=0)
4119  {
4120  strlistccf_f = "_F(GROUP_MA='GMF" + str_id + "'," + strlistccf_f +"),";
4121  listccf_f_group_noeud.insert(listccf_f_group_noeud.end(),strlistccf_f);
4122  list_fonction.insert(list_fonction.end(),strfonction);
4123  }
4124  }
4125 
4126  if(list_fonction.size()!=0)
4127  {
4128  for(int k=0;k<list_fonction.size();k++) fprintf(in,"%s\n",list_fonction[k].c_str());
4129  fprintf(in,"\n\n");
4130  }
4131  if(listccf_f_group_noeud.size()!=0)
4132  {
4133  chargepresente.push_back("PRES_F");
4134  if (coque) fprintf(in,"PRES_F = AFFE_CHAR_MECA_F (MODELE = MODCAL, FORCE_COQUE = (\n");
4135  else fprintf(in,"PRES_F = AFFE_CHAR_MECA_F (MODELE = MODCAL, PRES_REP = (\n");
4136  for(int k=0;k<listccf_f_group_noeud.size();k++) fprintf(in,"%s\n",listccf_f_group_noeud[k].c_str());
4137  fprintf(in,"),);\n\n");
4138  }
4139  if(listccf_group_noeud.size()!=0)
4140  {
4141  chargepresente.push_back("PRES");
4142  if (coque) fprintf(in,"PRES = AFFE_CHAR_MECA (MODELE = MODCAL, FORCE_COQUE = (\n");
4143  else fprintf(in,"PRES = AFFE_CHAR_MECA (MODELE = MODCAL, PRES_REP = (\n");
4144  for(int k=0;k<listccf_group_noeud.size();k++) fprintf(in,"%s\n",listccf_group_noeud[k].c_str());
4145  fprintf(in,"),);\n\n");
4146  }
4147 }
4148 
4149 
4150 
4151 
4152 
4153 
4154 
4155 void MG_EXPORT::aster_ecrire_comm_condition_limite_force_normale_2d(FILE *in,MG_GEOMETRIE* geo,bool stat_non_line,std::vector<std::string> &chargepresente)
4156 {
4157 bool existe=false;
4158 LISTE_MG_ARETE::iterator it;
4159 fprintf(in,"# ----- FORCE NORMALE-------------------\n");
4160 std::vector<std::string> listccf_group_noeud;
4161 std::vector<std::string> listccf_f_group_noeud;
4162 std::vector<std::string> list_fonction;
4163 double precision = geo->get_valeur_precision();
4164 for (MG_ARETE* are=geo->get_premier_arete(it);are!=NULL;are=geo->get_suivant_arete(it))
4165  {
4166  std::string strlistccf;
4167  std::string strlistccf_f;
4168  std::string strfonction;
4169  std::vector<std::string> listccf;
4170  double val;
4171  bool res=are->get_valeur_ccf((char*)"Pn",val);
4172  if (res)
4173  {
4174  aster_ecrire_comm_condition_limite_blocage_force_temperature(are,(char*)"Pn",(char*)"PRES",precision,stat_non_line,strlistccf,strlistccf_f,strfonction);
4175  }
4176  char chr_id[10];
4177  sprintf(chr_id,"%ld",are->get_id());
4178  std::string str_id = chr_id;
4179  if(strlistccf.size()!=0)
4180  {
4181  strlistccf = "_F(GROUP_MA='GMA" + str_id + "'," + strlistccf +"),";
4182  listccf_group_noeud.insert(listccf_group_noeud.end(),strlistccf);
4183  }
4184  if(strfonction.size()!=0)
4185  {
4186  strlistccf_f = "_F(GROUP_MA='GMA" + str_id + "'," + strlistccf_f +"),";
4187  listccf_f_group_noeud.insert(listccf_f_group_noeud.end(),strlistccf_f);
4188  list_fonction.insert(list_fonction.end(),strfonction);
4189  }
4190  }
4191 if(list_fonction.size()!=0)
4192 {
4193  for(int k=0;k<list_fonction.size();k++) fprintf(in,"%s\n",list_fonction[k].c_str());
4194  fprintf(in,"\n\n");
4195 }
4196 if(listccf_f_group_noeud.size()!=0)
4197 {
4198  chargepresente.push_back("PRES_F");
4199  fprintf(in,"PRES_F = AFFE_CHAR_MECA_F (MODELE = MODCAL, PRES_REP = (\n");
4200  for(int k=0;k<listccf_group_noeud.size();k++) fprintf(in,"%s\n",listccf_group_noeud[k].c_str());
4201  fprintf(in,"),);\n\n");
4202 }
4203 if(listccf_group_noeud.size()!=0)
4204 {
4205  chargepresente.push_back("PRES");
4206  fprintf(in,"PRES = AFFE_CHAR_MECA (MODELE = MODCAL, PRES_REP = (\n");
4207  for(int k=0;k<listccf_group_noeud.size();k++) fprintf(in,"%s\n",listccf_group_noeud[k].c_str());
4208  fprintf(in,"),);\n\n");
4209 }
4210 
4211 }
4212 
4213 
4214 
4215 
4217  std::string &strlistccf,
4218  std::string &strlistccf_f,
4219  std::string &strfonction,
4220  double precision,
4221  bool coque,
4222  bool avec3d,
4223  bool stat_non_line)
4224 {
4225  double valdx,valdy,valdz,valrx,valry,valrz,valda,valdt,valrt,valdr,valdax;
4226  bool resdx=ele->get_valeur_ccf((char*)"Dx",valdx);
4227  bool resdy=ele->get_valeur_ccf((char*)"Dy",valdy);
4228  bool resdz=ele->get_valeur_ccf((char*)"Dz",valdz);
4229  bool resrx=ele->get_valeur_ccf((char*)"Rx",valrx);
4230  bool resry=ele->get_valeur_ccf((char*)"Ry",valry);
4231  bool resrz=ele->get_valeur_ccf((char*)"Rz",valrz);
4232  bool resda=ele->get_valeur_ccf((char*)"Da",valda);
4233  bool resdt=ele->get_valeur_ccf((char*)"Dt",valdt);
4234  bool resrt=ele->get_valeur_ccf((char*)"Rt",valrt);
4235  bool resdr=ele->get_valeur_ccf((char*)"DR",valdr);
4236  bool resdax=ele->get_valeur_ccf((char*)"DA",valdax);
4237 
4238  if (resda)
4239  {
4240  resdx=true;resdy=true;resdz=true;resrx=true;resry=true;resrz=true;
4241  valdx=0.;valdy=0.;valdz=0.;valrx=0;valry=0.;valrz=0.;
4242  }
4243  if (resdt)
4244  {
4245  resdx=true;resdy=true;resdz=true;
4246  valdx=0.;valdy=0.;valdz=0.;
4247  }
4248  if (resrt)
4249  {
4250  resrx=true;resry=true;resrz=true;
4251  valrx=0;valry=0.;valrz=0.;
4252  }
4253  if (resdx)
4254  {
4255  if(resda==true)
4256  {
4257  aster_ecrire_comm_condition_limite_blocage_force_temperature(ele,(char*)"Da",(char*)"DX",precision,stat_non_line,strlistccf,strlistccf_f,strfonction);
4258  }
4259  else if(resdt==true)
4260  {
4261  aster_ecrire_comm_condition_limite_blocage_force_temperature(ele,(char*)"Dt",(char*)"DX",precision,stat_non_line,strlistccf,strlistccf_f,strfonction);
4262  }
4263  else
4264  {
4265  aster_ecrire_comm_condition_limite_blocage_force_temperature(ele,(char*)"Dx",(char*)"DX",precision,stat_non_line,strlistccf,strlistccf_f,strfonction);
4266  }
4267  }
4268  if (resdy)
4269  {
4270  if(resda==true)
4271  {
4272  aster_ecrire_comm_condition_limite_blocage_force_temperature(ele,(char*)"Da",(char*)"DY",precision,stat_non_line,strlistccf,strlistccf_f,strfonction);
4273  }
4274  else if(resdt==true)
4275  {
4276  aster_ecrire_comm_condition_limite_blocage_force_temperature(ele,(char*)"Dt",(char*)"DY",precision,stat_non_line,strlistccf,strlistccf_f,strfonction);
4277  }
4278  else
4279  {
4280  aster_ecrire_comm_condition_limite_blocage_force_temperature(ele,(char*)"Dy",(char*)"DY",precision,stat_non_line,strlistccf,strlistccf_f,strfonction);
4281  }
4282  }
4283  if ((resdz) && (avec3d))
4284  {
4285  if(resda==true)
4286  {
4287  aster_ecrire_comm_condition_limite_blocage_force_temperature(ele,(char*)"Da",(char*)"DZ",precision,stat_non_line,strlistccf,strlistccf_f,strfonction);
4288  }
4289  else if(resdt==true)
4290  {
4291  aster_ecrire_comm_condition_limite_blocage_force_temperature(ele,(char*)"Dt",(char*)"DZ",precision,stat_non_line,strlistccf,strlistccf_f,strfonction);
4292  }
4293  else
4294  {
4295  aster_ecrire_comm_condition_limite_blocage_force_temperature(ele,(char*)"Dz",(char*)"DZ",precision,stat_non_line,strlistccf,strlistccf_f,strfonction);
4296  }
4297  }
4298  if ((coque) && (resrx))
4299  {
4300  if(resda==true)
4301  {
4302  aster_ecrire_comm_condition_limite_blocage_force_temperature(ele,(char*)"Da",(char*)"DRX",precision,stat_non_line,strlistccf,strlistccf_f,strfonction);
4303  }
4304  else if(resdt==true)
4305  {
4306  aster_ecrire_comm_condition_limite_blocage_force_temperature(ele,(char*)"Rt",(char*)"DRX",precision,stat_non_line,strlistccf,strlistccf_f,strfonction);
4307  }
4308  else
4309  {
4310  aster_ecrire_comm_condition_limite_blocage_force_temperature(ele,(char*)"Rx",(char*)"DRX",precision,stat_non_line,strlistccf,strlistccf_f,strfonction);
4311  }
4312  }
4313  if ((coque) && (resry))
4314  {
4315  if(resda==true)
4316  {
4317  aster_ecrire_comm_condition_limite_blocage_force_temperature(ele,(char*)"Da",(char*)"DRY",precision,stat_non_line,strlistccf,strlistccf_f,strfonction);
4318  }
4319  else if(resdt==true)
4320  {
4321  aster_ecrire_comm_condition_limite_blocage_force_temperature(ele,(char*)"Rt",(char*)"DRY",precision,stat_non_line,strlistccf,strlistccf_f,strfonction);
4322  }
4323  else
4324  {
4325  aster_ecrire_comm_condition_limite_blocage_force_temperature(ele,(char*)"Ry",(char*)"DRY",precision,stat_non_line,strlistccf,strlistccf_f,strfonction);
4326  }
4327  }
4328  if ((coque) && (resrz))
4329  {
4330  if(resda==true)
4331  {
4332  aster_ecrire_comm_condition_limite_blocage_force_temperature(ele,(char*)"Da",(char*)"DRZ",precision,stat_non_line,strlistccf,strlistccf_f,strfonction);
4333  }
4334  else if(resdt==true)
4335  {
4336  aster_ecrire_comm_condition_limite_blocage_force_temperature(ele,(char*)"Rt",(char*)"DRZ",precision,stat_non_line,strlistccf,strlistccf_f,strfonction);
4337  }
4338  else
4339  {
4340  aster_ecrire_comm_condition_limite_blocage_force_temperature(ele,(char*)"Rz",(char*)"DRZ",precision,stat_non_line,strlistccf,strlistccf_f,strfonction);
4341  }
4342  }
4343  if (resdr)
4344  {
4345  aster_ecrire_comm_condition_limite_blocage_force_temperature(ele,(char*)"DR",(char*)"DNOR",precision,stat_non_line,strlistccf,strlistccf_f,strfonction);
4346  }
4347  if (resdax)
4348  {
4349  aster_ecrire_comm_condition_limite_blocage_force_temperature(ele,(char*)"DA",(char*)"DX",precision,stat_non_line,strlistccf,strlistccf_f,strfonction);
4350  }
4351 }
4352 
4353 
4354 void MG_EXPORT::aster_ecrire_comm_condition_limite_blocage(FILE *in,MG_GEOMETRIE* geo,bool coque,bool avec3d,bool stat_non_line,std::vector<std::string> &chargepresente,std::map<unsigned long,unsigned long> &gnexistant)
4355 {
4356 int base=(int)param_aster.get_valeur("Base_num_mail");
4357 std::vector<std::string> listccf_group_noeud;
4358 std::vector<std::string> listccf_f_group_noeud;
4359 std::vector<std::string> list_fonction;
4360 std::vector<std::string> list_face_impo;
4361 std::vector<std::string> list_face_impo_f;
4362 std::vector<std::string> list_liaison_oblique;
4363 std::vector<std::string> list_liaison_oblique_f;
4364 
4365 LISTE_MG_SOMMET::iterator it_som;
4366 LISTE_MG_ARETE::iterator it_arete;
4367 LISTE_MG_FACE::iterator it_face;
4368 
4369 double val;
4370 double precision=geo->get_valeur_precision();
4371 
4372 for(MG_SOMMET* som=geo->get_premier_sommet(it_som);som;som=geo->get_suivant_sommet(it_som))
4373 {
4374  std::string strlistccf;
4375  std::string strlistccf_f;
4376  std::string strfonction;
4377  aster_ecrire_comm_condition_limite_blocage_ini(som,strlistccf,strlistccf_f,strfonction,precision,coque,avec3d,stat_non_line);
4378  bool somnoeud=false;
4379  if (som->est_une_topo_element())
4380  {
4381  somnoeud=true;
4382  MG_SOMMET_NOEUD* somno=(MG_SOMMET_NOEUD*)som;
4383  MG_NOEUD* no=somno->get_mg_noeud();
4384  if (no->get_lien_topologie()==somno) somnoeud=false;;
4385  }
4386  if ((!somnoeud) || (geo->est_virtuelle()))
4387  {
4388  char chr_id[10];
4389  sprintf(chr_id,"%ld",som->get_id());
4390  std::string str_id = chr_id;
4391  if((strlistccf.size()!=0)&&!(som->get_valeur_ccf((char*)"DA",val))&&!(som->get_valeur_ccf((char*)"DR",val)))
4392  {
4393  strlistccf = "_F(GROUP_NO = 'GNS" + str_id + "'," + strlistccf +"),";
4394  listccf_group_noeud.insert(listccf_group_noeud.end(),strlistccf);
4395  }
4396  if((strfonction.size()!=0)&&!(som->get_valeur_ccf((char*)"DA",val))&&!(som->get_valeur_ccf((char*)"DR",val)))
4397  {
4398  strlistccf_f = "_F(GROUP_NO = 'GNS" + str_id + "'," + strlistccf_f +"),";
4399  listccf_f_group_noeud.insert(listccf_f_group_noeud.end(),strlistccf_f);
4400  list_fonction.insert(list_fonction.end(),strfonction);
4401  }
4402  }
4403  else
4404  {
4405  char chr_id[10];
4406  sprintf(chr_id,"%d",((MG_SOMMET_NOEUD*)som)->get_num_interne());
4407  std::string str_id = chr_id;
4408  if(strlistccf.size()!=0)
4409  {
4410  strlistccf = "_F(GROUP_NO = 'GNN" + str_id + "'," + strlistccf +"),";
4411  listccf_group_noeud.insert(listccf_group_noeud.end(),strlistccf);
4412  }
4413  if(strfonction.size()!=0)
4414  {
4415  strlistccf_f = "_F(GROUP_NO = 'GNN" + str_id + "'," + strlistccf_f +"),";
4416  listccf_f_group_noeud.insert(listccf_f_group_noeud.end(),strlistccf_f);
4417  list_fonction.insert(list_fonction.end(),strfonction);
4418  }
4419  }
4420 }
4421 
4422 for(MG_ARETE* arete=geo->get_premier_arete(it_arete);arete;arete=geo->get_suivant_arete(it_arete))
4423 {
4424  std::string strlistccf;
4425  std::string strlistccf_f;
4426  std::string strfonction;
4427  aster_ecrire_comm_condition_limite_blocage_ini(arete,strlistccf,strlistccf_f,strfonction,precision,coque,avec3d,stat_non_line);
4428  char chr_id[10];
4429  sprintf(chr_id,"%ld",arete->get_id());
4430  if (gnexistant.find(arete->get_id())==gnexistant.end()) continue;
4431  std::string str_id = chr_id;
4432  if((strlistccf.size()!=0)&&!(arete->get_valeur_ccf((char*)"DA",val))&&!(arete->get_valeur_ccf((char*)"DR",val)))
4433  {
4434  strlistccf = "_F(GROUP_NO = 'GNA" + str_id + "'," + strlistccf +"),";
4435  listccf_group_noeud.insert(listccf_group_noeud.end(),strlistccf);
4436  }
4437  if((strfonction.size()!=0)&&!(arete->get_valeur_ccf((char*)"DA",val))&&!(arete->get_valeur_ccf((char*)"DR",val)))
4438  {
4439  strlistccf_f = "_F(GROUP_NO = 'GNA" + str_id + "'," + strlistccf_f +"),";
4440  listccf_f_group_noeud.insert(listccf_f_group_noeud.end(),strlistccf_f);
4441  list_fonction.insert(list_fonction.end(),strfonction);
4442  }
4443 }
4444 
4445 for(MG_FACE* face=geo->get_premier_face(it_face);face;face=geo->get_suivant_face(it_face))
4446 {
4447  std::string strlistccf;
4448  std::string strlistccf_f;
4449  std::string strfonction;
4451 
4452  aster_ecrire_comm_condition_limite_blocage_ini(face,strlistccf,strlistccf_f,strfonction,precision,coque,avec3d,stat_non_line);
4453  char chr_id[10];
4454  sprintf(chr_id,"%ld",face->get_id());
4455  if (gnexistant.find(face->get_id())==gnexistant.end()) continue;
4456  std::string str_id = chr_id;
4457  if(strlistccf.size()!=0)
4458  {
4459  if((strlistccf.find("DNOR")!=-1)&&((face->get_surface()->get_type_geometrique(param)==GEOMETRIE::CONST::Co_CYLINDRE)||(face->get_surface()->get_type_geometrique(param)==GEOMETRIE::CONST::Co_SPHERE)))
4460  {
4461  std::string strccf = "'GMF" + str_id + "',";
4462  face->get_valeur_ccf((char*)"DR",val);
4463  regroupement_faces(face,val,param,strccf,geo);
4464  strccf = "_F(GROUP_MA = (" + strccf + ")," + get_string_condition_limite("DNOR",val) + "),";
4465  if(list_face_impo.size()!=0)
4466  {
4467  bool exist=false;
4468  for(int k=0;k<list_face_impo.size();k++)
4469  if(list_face_impo[k].find(std::to_string(face->get_id()))!=-1) exist=true;
4470  if(!exist) list_face_impo.insert(list_face_impo.end(),strccf);
4471  }
4472  else
4473  list_face_impo.insert(list_face_impo.end(),strccf);
4474  }
4475  if((face->get_valeur_ccf((char*)"DA",val))&&((strlistccf.find("DX")!=-1))&&(face->get_surface()->get_type_geometrique(param)==GEOMETRIE::CONST::Co_CYLINDRE))
4476  {
4477  std::string strccf = "_F(GROUP_MA = 'GMF" + str_id + "'," + get_string_condition_limite("DX",val) + get_string_angles_nautiques(param,precision) + ",),";
4478  list_liaison_oblique.insert(list_liaison_oblique.end(),strccf);
4479  }
4480  if(!(face->get_valeur_ccf((char*)"DR",val))&&!(face->get_valeur_ccf((char*)"DA",val)))
4481  {
4482  strlistccf = "_F(GROUP_NO = 'GNF" + str_id + "'," + strlistccf +"),";
4483  listccf_group_noeud.insert(listccf_group_noeud.end(),strlistccf);
4484  }
4485  }
4486  if(strlistccf_f.size()!=0)
4487  {
4488  if((strlistccf_f.find("DNOR")!=-1)&&((face->get_surface()->get_type_geometrique(param)==GEOMETRIE::CONST::Co_CYLINDRE)||(face->get_surface()->get_type_geometrique(param)==GEOMETRIE::CONST::Co_SPHERE)))
4489  {
4490  std::string strccf_f = "'GMF" + str_id + "',";
4491  face->get_valeur_ccf((char*)"DR",val);
4492  regroupement_faces(face,val,param,strccf_f,geo);
4493  strfonction = get_string_nom_fonction("DR",face->get_id(),base);
4494  strccf_f = "_F(GROUP_MA = (" + strccf_f + "),DNOR = " + strfonction + "),";
4495  if(list_face_impo_f.size()!=0)
4496  {
4497  strfonction = get_string_formule_stat_non_line(param_aster.get_valeur("Ti"),0.0,param_aster.get_valeur("Tf"),val,strfonction);
4498  bool exist=false;
4499  for(int k=0;k<list_face_impo_f.size();k++)
4500  if(list_face_impo_f[k].find(std::to_string(face->get_id()))!=-1) exist=true;
4501  if(!exist)
4502  {
4503  list_face_impo_f.insert(list_face_impo_f.end(),strccf_f);
4504  list_fonction.insert(list_fonction.end(),strfonction);
4505  }
4506  }
4507  else
4508  {
4509  list_face_impo_f.insert(list_face_impo_f.end(),strccf_f);
4510  strfonction = get_string_formule_stat_non_line(param_aster.get_valeur("Ti"),0.0,param_aster.get_valeur("Tf"),val,strfonction);
4511  list_fonction.insert(list_fonction.end(),strfonction);
4512  }
4513  }
4514  if((face->get_valeur_ccf((char*)"DA",val))&&((strlistccf_f.find("DX")!=-1))&&(face->get_surface()->get_type_geometrique(param)==GEOMETRIE::CONST::Co_CYLINDRE))
4515  {
4516  strfonction = get_string_nom_fonction("DA",face->get_id(),base);
4517  std::string strccf_f = "_F(GROUP_MA = 'GMF" + str_id + "',DX = " + strfonction + "," + get_string_angles_nautiques(param,precision) + ",),";
4518  list_liaison_oblique_f.insert(list_liaison_oblique_f.end(),strccf_f);
4519  strfonction = get_string_formule_stat_non_line(param_aster.get_valeur("Ti"),0.0,param_aster.get_valeur("Tf"),val,strfonction);
4520  list_fonction.insert(list_fonction.end(),strfonction);
4521  }
4522  if(!(face->get_valeur_ccf((char*)"DR",val))&&!(face->get_valeur_ccf((char*)"DA",val)))
4523  {
4524  strlistccf_f = "_F(GROUP_NO = 'GNF" + str_id + "'," + strlistccf_f +"),";
4525  listccf_f_group_noeud.insert(listccf_f_group_noeud.end(),strlistccf_f);
4526  list_fonction.insert(list_fonction.end(),strfonction);
4527  }
4528  }
4529 }
4530 
4531 if(list_fonction.size()!=0)
4532 {
4533  for(int k=0;k<list_fonction.size();k++) fprintf(in,"%s",list_fonction[k].c_str());
4534  fprintf(in,"\n\n");
4535 }
4536 if((listccf_f_group_noeud.size()!=0)||(list_face_impo_f.size()!=0)||(list_liaison_oblique_f.size()!=0))
4537 {
4538  chargepresente.push_back("BLOCAGEF");
4539  fprintf(in,"BLOCAGEF = AFFE_CHAR_MECA_F (MODELE = MODCAL,\n");
4540  if(listccf_f_group_noeud.size()!=0)
4541  {
4542  fprintf(in,"DDL_IMPO = (\n");
4543  for(int k=0;k<listccf_f_group_noeud.size();k++) fprintf(in,"%s\n",listccf_f_group_noeud[k].c_str());
4544  fprintf(in,"),\n");
4545  }
4546  if(list_face_impo_f.size()!=0)
4547  {
4548  fprintf(in,"FACE_IMPO = (\n");
4549  for(int k=0;k<list_face_impo_f.size();k++) fprintf(in,"%s\n",list_face_impo_f[k].c_str());
4550  fprintf(in,"),\n");
4551  }
4552  if(list_liaison_oblique_f.size()!=0)
4553  {
4554  fprintf(in,"LIAISON_OBLIQUE = (\n");
4555  for(int k=0;k<list_liaison_oblique_f.size();k++) fprintf(in,"%s\n",list_liaison_oblique_f[k].c_str());
4556  fprintf(in,"),\n");
4557  }
4558  fprintf(in,");\n\n");
4559 }
4560 if((listccf_group_noeud.size()!=0)||(list_face_impo.size()!=0)||(list_liaison_oblique.size()!=0))
4561 {
4562  chargepresente.push_back("BLOCAGE");
4563  fprintf(in,"BLOCAGE = AFFE_CHAR_MECA (MODELE = MODCAL,\n");
4564  if(listccf_group_noeud.size()!=0)
4565  {
4566  fprintf(in,"DDL_IMPO = (\n");
4567  for(int k=0;k<listccf_group_noeud.size();k++) fprintf(in,"%s\n",listccf_group_noeud[k].c_str());
4568  fprintf(in,"),\n");
4569  }
4570  if(list_face_impo.size()!=0)
4571  {
4572  fprintf(in,"FACE_IMPO = (\n");
4573  for(int k=0;k<list_face_impo.size();k++) fprintf(in,"%s\n",list_face_impo[k].c_str());
4574  fprintf(in,"),\n");
4575  }
4576  if(list_liaison_oblique.size()!=0)
4577  {
4578  fprintf(in,"LIAISON_OBLIQUE = (\n");
4579  for(int k=0;k<list_liaison_oblique.size();k++) fprintf(in,"%s\n",list_liaison_oblique[k].c_str());
4580  fprintf(in,"),\n");
4581  }
4582  fprintf(in,");\n\n");
4583 }
4584 }
4585 
4586 void MG_EXPORT::aster_ecrire_comm_condition_limite_temperature(FILE *in,MG_GEOMETRIE* geo,std::vector<std::string> &chargepresente,std::map<unsigned long,unsigned long> &gnexistant)
4587 {
4588 fprintf(in,"# ----- temperature imposée -------------------------\n");
4589 bool existe=false;
4590 LISTE_MG_SOMMET::iterator it;
4591 for (MG_SOMMET* som=geo->get_premier_sommet(it);som;som=geo->get_suivant_sommet(it))
4592  {
4593  std::vector<std::string> listccf;
4594  double val;
4595  bool res=som->get_valeur_ccf((char*)"Tn",val);
4596  if (res)
4597  {
4598  char valchar[100];
4599  sprintf(valchar,"%le",val);
4600  std::string valstr=valchar;
4601  std::string chaine="TEMP="+valstr;
4602  listccf.insert(listccf.end(),chaine);
4603  }
4604  if (listccf.size()!=0)
4605  {
4606  if (!existe)
4607  {
4608  fprintf(in,"TEMPE = AFFE_CHAR_THER (MODELE = MODCAL, TEMP_IMPO = (\n");
4609  chargepresente.push_back("TEMPE");
4610  existe=true;
4611  }
4612  if ((!som->est_une_topo_element()) || (geo->est_virtuelle()))
4613  fprintf(in,"_F(GROUP_NO='GNS%lu',",som->get_id());
4614  else
4615  {
4616  MG_SOMMET_NOEUD *somnoeud=(MG_SOMMET_NOEUD*)som;
4617  fprintf(in,"_F(GROUP_NO='GNN%d',",somnoeud->get_num_interne());
4618  }
4619  for (int k=0;k<listccf.size();k++)
4620  fprintf(in,"%s,",listccf[k].c_str());
4621  fprintf(in,"),\n");
4622  }
4623  }
4624 LISTE_MG_ARETE::iterator it2;
4625 for (MG_ARETE* arete=geo->get_premier_arete(it2);arete;arete=geo->get_suivant_arete(it2))
4626  {
4627  std::vector<std::string> listccf;
4628  double val;
4629  bool res=arete->get_valeur_ccf((char*)"Tn",val);
4630  if (gnexistant.find(arete->get_id())==gnexistant.end()) continue;
4631  if (res)
4632  {
4633  char valchar[100];
4634  sprintf(valchar,"%le",val);
4635  std::string valstr=valchar;
4636  std::string chaine="TEMP="+valstr;
4637  listccf.insert(listccf.end(),chaine);
4638  }
4639 
4640  if (listccf.size()!=0)
4641  {
4642  if (!existe)
4643  {
4644  fprintf(in,"TEMPE = AFFE_CHAR_THER (MODELE = MODCAL, TEMP_IMPO = (\n");
4645  chargepresente.push_back("TEMPE");
4646  existe=true;
4647  }
4648  fprintf(in,"_F(GROUP_NO='GNA%lu',",arete->get_id());
4649  for (int k=0;k<listccf.size();k++)
4650  fprintf(in,"%s,",listccf[k].c_str());
4651  fprintf(in,"),\n");
4652  }
4653 
4654  }
4655 
4656 LISTE_MG_FACE::iterator it3;
4657 for (MG_FACE* face=geo->get_premier_face(it3);face;face=geo->get_suivant_face(it3))
4658  {
4659  std::vector<std::string> listccf;
4660  double val;
4661  if (gnexistant.find(face->get_id())==gnexistant.end()) continue;
4662  bool res=face->get_valeur_ccf((char*)"Tn",val);
4663  if (res)
4664  {
4665  char valchar[100];
4666  sprintf(valchar,"%le",val);
4667  std::string valstr=valchar;
4668  std::string chaine="TEMP="+valstr;
4669  listccf.insert(listccf.end(),chaine);
4670  }
4671  if (listccf.size()!=0)
4672  {
4673  if (!existe)
4674  {
4675  fprintf(in,"TEMPE = AFFE_CHAR_THER (MODELE = MODCAL, TEMP_IMPO = (\n");
4676  chargepresente.push_back("TEMPE");
4677  existe=true;
4678  }
4679  fprintf(in,"_F(GROUP_NO='GNF%lu',",face->get_id());
4680  for (int k=0;k<listccf.size();k++)
4681  fprintf(in,"%s,",listccf[k].c_str());
4682  fprintf(in,"),\n");
4683  }
4684  }
4685 if (existe) fprintf(in,"),);\n\n");
4686 }
4687 void MG_EXPORT::aster_ecrire_comm_condition_limite_flux_thermique(FILE *in,MG_GEOMETRIE* geo,std::vector<std::string> &chargepresente)
4688 {
4689 fprintf(in,"# ----- flux imposé -------------------------\n");
4690  bool existe=false;
4691 LISTE_MG_FACE::iterator it3;
4692 for (MG_FACE* face=geo->get_premier_face(it3);face;face=geo->get_suivant_face(it3))
4693  {
4694  std::vector<std::string> listccf;
4695  double val;
4696  bool res=face->get_valeur_ccf((char*)"fn",val);
4697  if (res)
4698  {
4699  char valchar[100];
4700  sprintf(valchar,"%le",val);
4701  std::string valstr=valchar;
4702  std::string chaine="FLUN="+valstr;
4703  listccf.insert(listccf.end(),chaine);
4704  }
4705  if (listccf.size()!=0)
4706  {
4707  if (!existe)
4708  {
4709  fprintf(in,"FLUX = AFFE_CHAR_THER (MODELE = MODCAL, FLUX_REP = (\n");
4710  chargepresente.push_back("FLUX");
4711  existe=true;
4712  }
4713  fprintf(in,"_F(GROUP_MA='GMF%lu',",face->get_id());
4714  for (int k=0;k<listccf.size();k++)
4715  fprintf(in,"%s,",listccf[k].c_str());
4716  fprintf(in,"),\n");
4717  }
4718  }
4719 if (existe) fprintf(in,"),);\n\n");
4720 }
4721 
4722 
4723 
4724 
4725 void MG_EXPORT::aster_ecrire_comm_meca_statique(FILE *in,MG_GEOMETRIE* geo,bool vol,bool coque,bool poutre,bool desactiveerreur,bool estortho,std::vector<std::string> &chargepresente,char* coderesu)
4726 {
4727 fprintf(in,"# CALCUL MECANIQUE--------------------------------------------------------------\n\n");
4728 if (coque) fprintf(in,"RESU=MECA_STATIQUE(MODELE=MODCAL, CHAM_MATER=CHMAT, CARA_ELEM=CARA_COQ,\n%s,\n EXCIT=(\n",aster_ecrire_comm_solveur().c_str());
4729 if (poutre) fprintf(in,"RESU=MECA_STATIQUE(MODELE=MODCAL, CHAM_MATER=CHMAT, CARA_ELEM=CARA_POU,\n%s,\n EXCIT=(\n",aster_ecrire_comm_solveur().c_str());
4730 if ((vol)&&(estortho)) fprintf(in,"RESU=MECA_STATIQUE(MODELE=MODCAL, CHAM_MATER=CHMAT, CARA_ELEM=CARA_VOL,\n%s,\n EXCIT=(\n",aster_ecrire_comm_solveur().c_str());
4731 if ((vol)&&(!poutre)&&(!estortho)) fprintf(in,"RESU=MECA_STATIQUE(MODELE=MODCAL, CHAM_MATER=CHMAT,\n%s,\n EXCIT=(\n",aster_ecrire_comm_solveur().c_str());
4732 for (int i=0;i<chargepresente.size();i++)
4733  fprintf(in,"_F(CHARGE=%s,),\n",chargepresente[i].c_str());
4734  fprintf(in,"),);\n\n");
4735 
4736 fprintf(in,"# REACTION NODALE\n");
4737 if (coque) fprintf(in,"RESU=CALC_CHAMP(reuse=RESU,RESULTAT=RESU,TOUT_ORDRE='OUI', CARA_ELEM=CARA_COQ,FORCE='REAC_NODA',);\n");
4738 if (poutre) fprintf(in,"RESU=CALC_CHAMP(reuse=RESU,RESULTAT=RESU,TOUT_ORDRE='OUI', CARA_ELEM=CARA_POU,FORCE='REAC_NODA',);\n");
4739 else fprintf(in,"RESU=CALC_CHAMP(reuse=RESU,RESULTAT=RESU,TOUT_ORDRE='OUI', FORCE='REAC_NODA',);\n");
4740 
4741 std::string lieu ="NOEU";
4742 int val=(int)param_aster.get_valeur((char*)"Noeud_ele");
4743 if (val==1) lieu="ELNO";
4744 if (val==2) lieu="ELGA";
4745 if (coque) lieu="ELNO";
4746 char* plieu=(char*)lieu.c_str();
4747 
4748 
4749 std::string tout1d="TOUT='OUI'";
4750 std::string tout3d="TOUT='OUI'";
4751 if (poutre)
4752  {
4753  tout1d="GROUP_MA=(";
4754  tout3d="GROUP_MA=(";
4755  LISTE_MG_POUTRE::iterator itp;
4756  for (MG_POUTRE* pou=geo->get_premier_poutre(itp);pou!=NULL;pou=geo->get_suivant_poutre(itp))
4757  {
4758  char mess[500];
4759  sprintf(mess,"'GMP%lu',",pou->get_id());
4760  tout1d=tout1d+mess;
4761  }
4762  tout1d=tout1d+")";
4763  LISTE_MG_COQUE::iterator itc;
4764  for (MG_COQUE* coq=geo->get_premier_coque(itc);coq!=NULL;coq=geo->get_suivant_coque(itc))
4765  {
4766  char mess[500];
4767  sprintf(mess,"'GMC%lu',",coq->get_id());
4768  tout3d=tout3d+mess;
4769  }
4770  LISTE_MG_VOLUME::iterator itv;
4771  for (MG_VOLUME* vol=geo->get_premier_volume(itv);vol!=NULL;vol=geo->get_suivant_volume(itv))
4772  {
4773  char mess[500];
4774  sprintf(mess,"'GMV%lu',",vol->get_id());
4775  tout3d=tout3d+mess;
4776  }
4777  tout3d=tout3d+")";
4778  }
4779 
4780 if ((coderesu)[5]=='1') // Déformations (à partir des déplacements)
4781  {
4782  fprintf(in,"\n# DEFORMATIONS AUX NOEUDS A PARTIR DES DEPLACEMENTS\n");
4783  fprintf(in,"RESU=CALC_CHAMP(reuse=RESU, RESULTAT=RESU, %s, DEFORMATION='EPSI_%s',);\n",tout3d.c_str(),plieu);
4784  }
4785 if (((coderesu[4]=='1') || (coderesu[6]=='1')) && (val!=2)) // Contraintes aux noeuds (à partir des contraintes aux points de Gauss calculées par défaut)
4786  {
4787  fprintf(in,"\n# CONTRAINTES AUX NOEUDS A PARTIR DES DEPLACEMENTS\n");
4788  fprintf(in,"RESU=CALC_CHAMP(reuse=RESU, RESULTAT=RESU, %s, CONTRAINTE='SIEF_%s',);\n",tout3d.c_str(),plieu);
4789  if (poutre) fprintf(in,"\n# EFFORTS AUX NOEUDS PAR ELEMENT A PARTIR DES DEPLACEMENTS\n");
4790  if (poutre) fprintf(in,"RESU=CALC_CHAMP(reuse=RESU, RESULTAT=RESU, %s, CONTRAINTE='EFGE_ELNO',);\n",tout1d.c_str());
4791  if (poutre) fprintf(in,"RESU=CALC_CHAMP(reuse=RESU, RESULTAT=RESU, %s, CONTRAINTE='SIPM_ELNO',);\n",tout1d.c_str());
4792  if (poutre) fprintf(in,"RESU=CALC_CHAMP(reuse=RESU, RESULTAT=RESU, %s, CONTRAINTE='SIPO_ELNO',);\n",tout1d.c_str());
4793  }
4794 if (coderesu[6]=='1') // Contraintes de Von Mises et autres critères (à partir des contraintes aux noeuds)
4795  {
4796  fprintf(in,"\n# CONTRAINTES DE VON MISES AUX NOEUDS A PARTIR DES CONTRAINTES AUX NOEUDS\n");
4797  fprintf(in,"RESU=CALC_CHAMP(reuse=RESU, RESULTAT=RESU, %s, CRITERES='SIEQ_%s',);\n",tout3d.c_str(),plieu);
4798  }
4799 if (coderesu[7]=='1') // Énergie de déformation (à partir des déplacements)
4800  {
4801  fprintf(in,"\n# ENERGIE DE DEFORMATION PAR ELEMENT A DES PARTIR DES DEPLACEMENTS\n");
4802  fprintf(in,"RESU=CALC_CHAMP(reuse=RESU, RESULTAT=RESU, TOUT='OUI', ENERGIE='EPOT_ELEM',);\n");
4803  if (!coque)
4804  if (!desactiveerreur)
4805  if (!estortho)
4806  fprintf(in, "RESU=CALC_ERREUR(reuse=RESU, RESULTAT=RESU, TOUT='OUI', OPTION='ERZ1_ELEM',); \n");
4807  }
4808 }
4809 
4810 void MG_EXPORT::aster_ecrire_comm_ther_lineaire(FILE* in,MG_GEOMETRIE *geo,std::vector<std::string> &chargepresente)
4811 {
4812  int PAS;
4813  double DEBUT,JUSQU_A;
4814  double VALE,PRECISION,INST_INIT,PARM_THETA;
4815  DEBUT=param_aster.get_valeur("Ti");
4816  PAS=(int)param_aster.get_valeur("Pas");
4817  JUSQU_A=param_aster.get_valeur("Tf");
4818  PARM_THETA=param_aster.get_valeur("Euler");
4819  VALE=param_aster.get_valeur("Tref");
4820  PRECISION=param_aster.get_valeur("Eps");
4821  INST_INIT=DEBUT;
4822  if(PAS!=0)
4823  {
4824  fprintf(in,"\n# Transitoire : liste de temps------------------------------------------------\n");
4825  fprintf(in,"list1=DEFI_LIST_REEL(DEBUT=%lf,INTERVALLE=(_F(JUSQU_A=%lf,NOMBRE=%d,),),);\n\n",DEBUT,JUSQU_A,PAS);
4826  }
4827  std::string str_archive;
4828  std::string str_inst_calc_champ;
4829  int NB_PAS_ARCHIVE = (int)param_aster.get_valeur("It_resultat");
4830  if(NB_PAS_ARCHIVE!=0)
4831  {
4832 
4833  fprintf(in,"\n# Liste d'instants d'archivage------------------------------------------------\n");
4834  fprintf(in,"lst_arch=DEFI_LIST_REEL(DEBUT=%lf,INTERVALLE=(_F(JUSQU_A=%lf,NOMBRE=%d,),),);\n\n",DEBUT,JUSQU_A,NB_PAS_ARCHIVE);
4835  }
4836  fprintf(in,"# CALCUL THERMIQUE--------------------------------------------------------------\n\n");
4837  if(PAS!=0)
4838  {
4839  fprintf(in,"TEMP=THER_LINEAIRE(MODELE=MODCAL,\n%s,\n CHAM_MATER=CHMAT, ETAT_INIT=_F(VALE=%lf,PRECISION=%le,),EXCIT=(\n",aster_ecrire_comm_solveur().c_str(),VALE,PRECISION);
4840  }
4841  else
4842  {
4843  fprintf(in,"TEMP=THER_LINEAIRE(MODELE=MODCAL,\n%s,\n CHAM_MATER=CHMAT,EXCIT=(\n",aster_ecrire_comm_solveur().c_str());
4844  }
4845  for (int i=0;i<chargepresente.size();i++)
4846  fprintf(in,"_F(CHARGE=%s,),\n",chargepresente[i].c_str());
4847  if(PAS!=0) fprintf(in,"),INCREMENT=_F(LIST_INST=list1,INST_INIT=%lf,),PARM_THETA=%lf,);\n\n",INST_INIT,PARM_THETA);
4848  else fprintf(in,"),);\n");
4849  fprintf(in,"FLUX_C=CALC_CHAMP(RESULTAT=TEMP,TOUT_ORDRE='OUI', THERMIQUE='FLUX_ELGA',);\n");
4850 }
4851 
4852 void MG_EXPORT::aster_ecrire_comm_ther_lineaire_iteratif(FILE* in,MG_GEOMETRIE *geo,int nbvol,int nbcoque,int nbpoutre,std::vector<std::string> &chargepresente,std::map<unsigned long,unsigned long> &gnexistant)
4853 
4854 {
4855 int PAS,division,taille,PASVAR,PASVAR1,corr;
4856 double VALE,PRECISION,JUSQU_A,DEBUT,TEMP_INIT,FLUX_INIT,coef,Rho_cp,PARM_THETA;
4857 corr=100;
4858 Rho_cp=100.000000;
4859 std::string maillage;
4860 VALE=param_aster.get_valeur("Tref");
4861 PRECISION=param_aster.get_valeur("Eps");
4862 DEBUT=param_aster.get_valeur("Ti");
4863 JUSQU_A=param_aster.get_valeur("Tf");
4864 PAS=(int)param_aster.get_valeur("Pas");
4865 PASVAR=(int)param_aster.get_valeur("Pasvariable");
4866 PASVAR1=(int)param_aster.get_valeur("division_pas");
4867 PARM_THETA=param_aster.get_valeur("Euler");
4868 division=param_aster.get_valeur("DIV");
4869 LISTE_MG_ARETE::iterator it;
4870 LISTE_MG_FACE::iterator it1;
4871 for (int j=0;j<nbvol;j++) // Éléments volumiques
4872  {
4873  MG_VOLUME* vol=geo->get_mg_volume(j);
4874  MG_GEOM_FONCTION *fonc_cond;
4875  int val_Cond1;
4876  int val_Cond2 = geo->get_nb_mg_arete();
4877  int val_Cond3 = geo->get_nb_mg_sommet();
4878  int val_Cond4 = geo->get_nb_mg_face();
4879  val_Cond1=3+val_Cond2+val_Cond3+val_Cond4;
4880  fonc_cond = geo->get_mg_geom_fonctionid((int)val_Cond1);
4881  double vec[2];
4882  fonc_cond->get_point(0,vec);
4883  coef=corr*vec[1];
4884  fprintf(in,"# CALCUL THERMIQUE stationnaire--------------------------------------------------------------\n\n");
4885  fprintf(in,"sol=[0]*%d;\n",PAS+1);
4886  fprintf(in,"TEMP_ST = AFFE_CHAR_THER (MODELE = MODCAL, TEMP_IMPO = (\n");
4887  /* for (MG_ARETE* arete=geo->get_premier_arete(it);arete;arete=geo->get_suivant_arete(it))
4888  {
4889  if (gnexistant.find(arete->get_id())==gnexistant.end()) continue;
4890  fprintf(in,"_F(GROUP_NO='GNA%lu',TEMP=0.000000,),",arete->get_id());
4891  }*/
4892  for (MG_FACE* face=geo->get_premier_face(it1);face;face=geo->get_suivant_face(it1))
4893  {
4894  if (gnexistant.find(face->get_id())==gnexistant.end()) continue;
4895  fprintf(in,"_F(GROUP_NO='GNF%lu',TEMP=0.000000,),",face->get_id());
4896  }
4897  fprintf(in,"),);\n\n");
4898 
4899  fprintf(in,"MA_%lu=DEFI_MATERIAU(THER=_F(LAMBDA=%le,RHO_CP=%lf,),);\n\n",vol->get_id(),coef,Rho_cp);
4900  aster_ecrire_comm_affe_materiau(in,"MAIL",nbvol,nbcoque,nbpoutre,geo,"MA_");
4901  fprintf(in,"sol[0]=THER_LINEAIRE(MODELE=MODCAL,\n%s,\n CHAM_MATER=CHMAT, ETAT_INIT=_F(STATIONNAIRE='OUI',),EXCIT=(\n",aster_ecrire_comm_solveur().c_str());
4902  fprintf(in,"_F(CHARGE=TEMP_ST,),\n");
4903  fprintf(in,"),PARM_THETA=%lf,);\n\n",PARM_THETA);
4904 
4905 
4906  fprintf(in,"temp=CREA_CHAMP(OPERATION='EXTR',RESULTAT=sol[0],NUME_ORDRE=0,NOM_CHAM='TEMP',TYPE_CHAM='NOEU_TEMP_R');\n\n");
4907  fprintf(in,"temp1=CREA_RESU(TYPE_RESU='EVOL_VARC',NOM_CHAM='TEMP',OPERATION='AFFE',AFFE=(_F(CHAM_GD=temp,INST=%lf,),),);\n\n",DEBUT);
4908  fprintf(in,"IMPR_RESU(MODELE=MODCAL,FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=sol[0], NOM_CHAM='TEMP', SOUS_TITRE='CHAMP AUX NOEUDS DE NOM SYMBOLIQUE TEMPERATURE',),);\n");
4909  fprintf(in,"DETRUIRE(CONCEPT=(_F(NOM=CHMAT,),),);\n");
4910  //Boucle itérative dans le fichier de commande CODE_ASTER
4911  fprintf(in,"# CALCUL THERMIQUE itératif--------------------------------------------------------------\n\n");
4912 
4913  if (PASVAR==1)
4914  {
4915  val_Cond1=4+val_Cond2+val_Cond3+val_Cond4;
4916  fonc_cond = geo->get_mg_geom_fonctionid((int)val_Cond1);
4917  double col[2];
4918  fprintf(in,"list1=DEFI_LIST_REEL(DEBUT=%lf,\n\n",DEBUT);
4919  fprintf(in,"INTERVALLE=(\n\n");
4920  for(long k=1;k<fonc_cond->get_nb_point()-1;k++)
4921  {
4922  fonc_cond->get_point(k,col);
4923  fprintf(in,"_F(JUSQU_A=%lf,NOMBRE=%d,),\n\n",col[1],PASVAR1);
4924  }
4925  fonc_cond->get_point(fonc_cond->get_nb_point()-1,col);
4926  fprintf(in,"_F(JUSQU_A=%lf,NOMBRE=%d,),\n\n",col[1],PASVAR1);
4927  fprintf(in,"),);\n\n");
4928 
4929  }
4930  else
4931  {
4932  fprintf(in,"list1=DEFI_LIST_REEL(DEBUT=%lf,INTERVALLE=(_F(JUSQU_A=%lf,NOMBRE=%d,),),);\n\n",DEBUT,JUSQU_A,PAS);
4933  }
4934  fprintf(in,"for n in range (1,(%d+1)):\n\n",PAS);
4935  aster_ecrire_comm_affe_materiau_iteratif(in,"MAIL",nbvol,nbcoque,geo);
4936  fprintf(in," sol[n]=THER_LINEAIRE(MODELE=MODCAL,\n %s,\n CHAM_MATER=CHMAT, ETAT_INIT=_F(EVOL_THER=sol[n-1],),EXCIT=(\n",aster_ecrire_comm_solveur().c_str());
4937  for (int i=0;i<chargepresente.size();i++)
4938  {
4939  fprintf(in," _F(CHARGE=%s,),\n",chargepresente[i].c_str());
4940  }
4941  fprintf(in," ),INCREMENT=_F(LIST_INST=list1,NUME_INST_INIT=(n-1),NUME_INST_FIN=n,),PARM_THETA=%lf,);\n\n",PARM_THETA);
4942 
4943  fprintf(in," if n%% %d==0:\n\n",division);
4944  fprintf(in," IMPR_RESU(MODELE=MODCAL,FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=sol[n],NUME_ORDRE=1, NOM_CHAM='TEMP',\n");
4945  fprintf(in," SOUS_TITRE='CHAMP AUX NOEUDS DE NOM SYMBOLIQUE TEMPERATURE',),);\n");
4946  fprintf(in," DETRUIRE(CONCEPT=(_F(NOM=temp,),),);\n");
4947  fprintf(in," temp=CREA_CHAMP(OPERATION='EXTR',RESULTAT=sol[n],NUME_ORDRE=1,NOM_CHAM='TEMP',TYPE_CHAM='NOEU_TEMP_R');\n\n");
4948  fprintf(in," DETRUIRE(CONCEPT=(_F(NOM=temp1,),),);\n");
4949  fprintf(in," temp1=CREA_RESU(TYPE_RESU='EVOL_VARC',NOM_CHAM='TEMP',OPERATION='AFFE',AFFE=(_F(CHAM_GD=temp,INST=n,),),);\n\n");
4950  fprintf(in," DETRUIRE(CONCEPT=(_F(NOM=CHMAT,),),);\n");
4951  fprintf(in," print ('ITERATION: ',n) \n");
4952 
4953 
4954  }
4955 }
4956 
4957 
4958 
4959 
4960 
4961 
4962 
4963 
4964 
4965 void MG_EXPORT::aster_ecrire_comm_ther_non_lineaire_iteratif(FILE* in,MG_GEOMETRIE *geo,int nbvol,int nbcoque,int nbpoutre,std::vector<std::string> &chargepresente,std::map<unsigned long,unsigned long> &gnexistant)
4966 
4967 {
4968 int PAS,division,taille,PASVAR,PASVAR1,corr;
4969 double VALE,PRECISION,JUSQU_A,DEBUT,TEMP_INIT,FLUX_INIT,coef,Rho_cp,PARM_THETA,N1,N2,N3,CONV1,CONV2,CONV3;
4970 corr=100;
4971 Rho_cp=100.000000;
4972 std::string maillage;
4973 VALE=param_aster.get_valeur("Tref");
4974 PRECISION=param_aster.get_valeur("Eps");
4975 DEBUT=param_aster.get_valeur("Ti");
4976 JUSQU_A=param_aster.get_valeur("Tf");
4977 PAS=(int)param_aster.get_valeur("Pas");
4978 PASVAR=(int)param_aster.get_valeur("Pasvariable");
4979 PASVAR1=(int)param_aster.get_valeur("division_pas");
4980 N1=param_aster.get_valeur("n1");
4981 N2=param_aster.get_valeur("n2");
4982 N3=param_aster.get_valeur("n3");
4983 CONV1=param_aster.get_valeur("conv1");
4984 CONV2=param_aster.get_valeur("conv2");
4985 CONV3=param_aster.get_valeur("conv3");
4986 PARM_THETA=param_aster.get_valeur("Euler");
4987 division=param_aster.get_valeur("DIV");
4988 LISTE_MG_ARETE::iterator it;
4989 LISTE_MG_FACE::iterator it1;
4990 for (int j=0;j<nbvol;j++) // Éléments volumiques
4991  {
4992  MG_VOLUME* vol=geo->get_mg_volume(j);
4993  MG_GEOM_FONCTION *fonc_cond;
4994  int val_Cond1;
4995  int val_Cond2 = geo->get_nb_mg_arete();
4996  int val_Cond3 = geo->get_nb_mg_sommet();
4997  int val_Cond4 = geo->get_nb_mg_face();
4998  val_Cond1=3+val_Cond2+val_Cond3+val_Cond4;
4999  fonc_cond = geo->get_mg_geom_fonctionid((int)val_Cond1);
5000  double vec[2];
5001  fonc_cond->get_point(0,vec);
5002  coef=corr*vec[1];
5003  fprintf(in,"# CALCUL THERMIQUE stationnaire--------------------------------------------------------------\n\n");
5004  fprintf(in,"sol=[0]*%d;\n",PAS+1);
5005  fprintf(in,"TEMP_ST = AFFE_CHAR_THER (MODELE = MODCAL, TEMP_IMPO = (\n");
5006  /* for (MG_ARETE* arete=geo->get_premier_arete(it);arete;arete=geo->get_suivant_arete(it))
5007  {
5008  if (gnexistant.find(arete->get_id())==gnexistant.end()) continue;
5009  fprintf(in,"_F(GROUP_NO='GNA%lu',TEMP=0.000000,),",arete->get_id());
5010  }*/
5011  for (MG_FACE* face=geo->get_premier_face(it1);face;face=geo->get_suivant_face(it1))
5012  {
5013  if (gnexistant.find(face->get_id())==gnexistant.end()) continue;
5014  fprintf(in,"_F(GROUP_NO='GNF%lu',TEMP=0.000000,),",face->get_id());
5015  }
5016  fprintf(in,"),);\n\n");
5017  fprintf(in,"MA_%lu=DEFI_MATERIAU(THER=_F(LAMBDA=%le,RHO_CP=%lf,),);\n\n",vol->get_id(),coef,Rho_cp);
5018  aster_ecrire_comm_affe_materiau(in,"MAIL",nbvol,nbcoque,nbpoutre,geo,"MA_");
5019  fprintf(in,"sol[0]=THER_LINEAIRE(MODELE=MODCAL,\n%s,\n CHAM_MATER=CHMAT, ETAT_INIT=_F(STATIONNAIRE='OUI',),EXCIT=(\n",aster_ecrire_comm_solveur().c_str());
5020  fprintf(in,"_F(CHARGE=TEMP_ST,),\n");
5021  fprintf(in,"),PARM_THETA=%lf,);\n\n",PARM_THETA);
5022 
5023 
5024  fprintf(in,"temp=CREA_CHAMP(OPERATION='EXTR',RESULTAT=sol[0],NUME_ORDRE=0,NOM_CHAM='TEMP',TYPE_CHAM='NOEU_TEMP_R');\n\n");
5025  fprintf(in,"temp1=CREA_RESU(TYPE_RESU='EVOL_VARC',NOM_CHAM='TEMP',OPERATION='AFFE',AFFE=(_F(CHAM_GD=temp,INST=%lf,),),);\n\n",DEBUT);
5026  fprintf(in,"IMPR_RESU(MODELE=MODCAL,FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=sol[0], NOM_CHAM='TEMP', SOUS_TITRE='CHAMP AUX NOEUDS DE NOM SYMBOLIQUE TEMPERATURE',),);\n");
5027  fprintf(in,"DETRUIRE(CONCEPT=(_F(NOM=CHMAT,),),);\n");
5028  //Boucle itérative dans le fichier de commande CODE_ASTER
5029  fprintf(in,"# CALCUL THERMIQUE itératif--------------------------------------------------------------\n\n");
5030 
5031  if (PASVAR==1)
5032  {
5033  val_Cond1=4+val_Cond2+val_Cond3+val_Cond4;
5034  fonc_cond = geo->get_mg_geom_fonctionid((int)val_Cond1);
5035  double col[2];
5036  fprintf(in,"list1=DEFI_LIST_REEL(DEBUT=%lf,\n\n",DEBUT);
5037  fprintf(in,"INTERVALLE=(\n\n");
5038  for(long k=1;k<fonc_cond->get_nb_point()-1;k++)
5039  {
5040  fonc_cond->get_point(k,col);
5041  fprintf(in,"_F(JUSQU_A=%lf,NOMBRE=%d,),\n\n",col[1],PASVAR1);
5042  }
5043  fonc_cond->get_point(fonc_cond->get_nb_point()-1,col);
5044  fprintf(in,"_F(JUSQU_A=%lf,NOMBRE=%d,),\n\n",col[1],PASVAR1);
5045  fprintf(in,"),);\n\n");
5046 
5047  }
5048  else
5049  {
5050  fprintf(in,"list1=DEFI_LIST_REEL(DEBUT=%lf,INTERVALLE=(_F(JUSQU_A=%lf,NOMBRE=%d,),),);\n\n",DEBUT,JUSQU_A,PAS);
5051  }
5052  fprintf(in,"for n in range (1,(%d+1)):\n\n",PAS);
5053  aster_ecrire_comm_affe_materiau_iteratif(in,"MAIL",nbvol,nbcoque,geo);
5054  fprintf(in," sol[n]=THER_NON_LINE(MODELE=MODCAL,\n %s,\n CHAM_MATER=CHMAT, ETAT_INIT=_F(EVOL_THER=sol[n-1],),EXCIT=(\n",aster_ecrire_comm_solveur().c_str());
5055  for (int i=0;i<chargepresente.size();i++)
5056  {
5057  fprintf(in," _F(CHARGE=%s,),\n",chargepresente[i].c_str());
5058  }
5059  fprintf(in," ),NEWTON=_F(REAC_ITER=%lf,RESI_LINE_RELA=%lf,ITER_LINE_MAXI=%lf,),\n\n",N1,N2,N3);
5060  fprintf(in," CONVERGENCE=_F(RESI_GLOB_RELA=%lf,RESI_GLOB_MAXI=%lf,ITER_GLOB_MAXI=%lf,\n\n",CONV1,CONV2,CONV3);
5061  fprintf(in," ),INCREMENT=_F(LIST_INST=list1,NUME_INST_INIT=(n-1),NUME_INST_FIN=n,),PARM_THETA=%lf,);\n\n",PARM_THETA);
5062 
5063  fprintf(in," if n%% %d==0:\n\n",division);
5064  fprintf(in," IMPR_RESU(MODELE=MODCAL,FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=sol[n],NUME_ORDRE=1, NOM_CHAM='TEMP',\n");
5065  fprintf(in," SOUS_TITRE='CHAMP AUX NOEUDS DE NOM SYMBOLIQUE TEMPERATURE',),);\n");
5066  fprintf(in," DETRUIRE(CONCEPT=(_F(NOM=temp,),),);\n");
5067  fprintf(in," temp=CREA_CHAMP(OPERATION='EXTR',RESULTAT=sol[n],NUME_ORDRE=1,NOM_CHAM='TEMP',TYPE_CHAM='NOEU_TEMP_R');\n\n");
5068  fprintf(in," DETRUIRE(CONCEPT=(_F(NOM=temp1,),),);\n");
5069  fprintf(in," temp1=CREA_RESU(TYPE_RESU='EVOL_VARC',NOM_CHAM='TEMP',OPERATION='AFFE',AFFE=(_F(CHAM_GD=temp,INST=n,),),);\n\n");
5070  fprintf(in," DETRUIRE(CONCEPT=(_F(NOM=CHMAT,),),);\n");
5071  fprintf(in," print ('ITERATION: ',n)\n");
5072 
5073 
5074  }
5075 }
5076 void MG_EXPORT::aster_ecrire_comm_imprime_resultat_statique(FILE *in,char* coderesu,bool avec3d,bool poutre,bool desactiveerreur)
5077 {
5078  std::string lieu ="NOEU";
5079  std::string champ="AUX NOEUDS";
5080  int val=(int)param_aster.get_valeur((char*)"Noeud_ele");
5081  if (val==1)
5082  {
5083  lieu="ELNO";
5084  champ="PAR ELEMENT AUX NOEUDS" ;
5085  }
5086  if (val==2)
5087  {
5088  lieu="ELGA";
5089  champ="PAR ELEMENT AUX POINTS DE GAUSS" ;
5090  }
5091  char* plieu=(char*)lieu.c_str();
5092  char* pchamp=(char*)champ.c_str();
5093 fprintf(in,"\n# IMPRESSION DES RESULTATS------------------------------------------------------\n");
5094 if (coderesu[3]=='1') // Déplacements (résultats bruts du calcul par éléments finis)
5095  {
5096  fprintf(in,"\n# DEPLACEMENTS\n");
5097  if (avec3d) fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESU, NOM_CHAM='DEPL', SOUS_TITRE='CHAMP AUX NOEUDS DE NOM SYMBOLIQUE DEPL',),);\n");
5098  else fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESU, NOM_CHAM='DEPL', SOUS_TITRE='CHAMP AUX NOEUDS DE NOM SYMBOLIQUE DEPL_2D',),);\n");
5099  fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESU, NOM_CHAM='REAC_NODA', SOUS_TITRE='CHAMP AUX NOEUDS DE NOM SYMBOLIQUE FORCE_REACTION',),);\n");
5100  }
5101 if (coderesu[5]=='1') // Déformations (à partir des déplacements)
5102  {
5103  fprintf(in,"\n# DEFORMATIONS AUX NOEUDS A PARTIR DES DEPLACEMENTS\n");
5104  if (avec3d) fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESU, NOM_CHAM='EPSI_%s',SOUS_TITRE='CHAMP %s DE NOM SYMBOLIQUE TENSEUR_EPS',),);\n",plieu,pchamp);
5105  else fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESU, NOM_CHAM='EPSI_%s',SOUS_TITRE='CHAMP %s DE NOM SYMBOLIQUE TENSEUR_EPS_2D',),);\n",plieu,pchamp);
5106  }
5107 if (coderesu[4]=='1') // Contraintes aux noeuds (à partir des contraintes aux points de Gauss calculées par défaut)
5108  {
5109  fprintf(in,"\n# CONTRAINTES AUX NOEUDS A PARTIR DES DEPLACEMENTS\n");
5110  if (avec3d)
5111  if (poutre) fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESU, NOM_CMP=('SIXX','SIYY','SIZZ','SIXY','SIXZ','SIYZ',),NOM_CHAM='SIEF_%s',SOUS_TITRE='CHAMP %s DE NOM SYMBOLIQUE TENSEUR_SIGMA',),);\n",plieu,pchamp);
5112  else fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESU, NOM_CHAM='SIEF_%s',SOUS_TITRE='CHAMP %s DE NOM SYMBOLIQUE TENSEUR_SIGMA',),);\n",plieu,pchamp);
5113  else fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESU, NOM_CHAM='SIEF_%s',SOUS_TITRE='CHAMP %s DE NOM SYMBOLIQUE TENSEUR_SIGMA_2D',),);\n",plieu,pchamp);
5114  if (poutre)
5115  {
5116  fprintf(in,"\n# EFFORTS AUX NOEUDS PAR ELEMENT A PARTIR DES DEPLACEMENTS\n");
5117  fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESU, NOM_CHAM='EFGE_ELNO',SOUS_TITRE='CHAMP PAR ELEMENT AUX NOEUDS DE NOM SYMBOLIQUE EFFORT_NOEUD',),);\n");
5118  fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESU, NOM_CHAM='SIPM_ELNO',SOUS_TITRE='CHAMP PAR ELEMENT AUX NOEUDS DE NOM SYMBOLIQUE CONTRAINTE_MAX_POUTRE',),);\n");
5119  fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESU, NOM_CHAM='SIPO_ELNO',SOUS_TITRE='CHAMP PAR ELEMENT AUX NOEUDS DE NOM SYMBOLIQUE CONTRAINTE_POUTRE',),);\n");
5120  }
5121 
5122  }
5123 if (coderesu[6]=='1') // Contraintes de Von Mises et autres critères (à partir des contraintes aux noeuds)
5124  {
5125  fprintf(in,"\n# CONTRAINTES DE VON MISES AUX NOEUDS A PARTIR DES CONTRAINTES AUX NOEUDS\n");
5126  if (avec3d) fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESU, NOM_CHAM='SIEQ_%s',SOUS_TITRE='CHAMP %s DE NOM SYMBOLIQUE CONTRAINTE_EQUI2',),);\n",plieu,pchamp);
5127  else fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESU, NOM_CHAM='SIEQ_%s',SOUS_TITRE='CHAMP %s DE NOM SYMBOLIQUE CONTRAINTE_EQUI2_2D',),);\n",plieu,pchamp);
5128  }
5129 if (coderesu[7]=='1') // Énergie de déformation (à partir des déplacements)
5130  {
5131  fprintf(in,"\n# ENERGIE DE DEFORMATION PAR ELEMENT A DES PARTIR DES DEPLACEMENTS\n");
5132  if (avec3d) fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESU, NOM_CHAM='EPOT_ELEM',SOUS_TITRE='CHAMP PAR ELEMENT CONSTANT SUR ELEMENT DE NOM SYMBOLIQUE ENERGIE',),);\n");
5133  else fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESU, NOM_CHAM='EPOT_ELEM',SOUS_TITRE='CHAMP PAR ELEMENT CONSTANT SUR ELEMENT DE NOM SYMBOLIQUE ENERGIE_2D',),);\n");
5134  if (!desactiveerreur)
5135  {
5136  if (avec3d) fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESU, NOM_CHAM='ERZ1_ELEM',SOUS_TITRE='CHAMP PAR ELEMENT CONSTANT SUR ELEMENT DE NOM SYMBOLIQUE ERREUR',),);\n");
5137  else fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESU, NOM_CHAM='ERZ1_ELEM',SOUS_TITRE='CHAMP PAR ELEMENT CONSTANT SUR ELEMENT DE NOM SYMBOLIQUE ERREUR_2D',),);\n");
5138  }
5139  }
5140 }
5141 
5142 
5143 
5144 
5145 
5146 
5148 {
5149 fprintf(in,"\n# IMPRESSION DES RESULTATS------------------------------------------------------\n");
5150 fprintf(in,"\n");
5151 if (coderesu[3]=='1') // Déplacements aux noeuds (résultats bruts du calcul par éléments finis)
5152  {
5153  fprintf(in,"\n# DEPLACEMENTS\n");
5154  fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESU, NOM_CHAM='DEPL', SOUS_TITRE='CHAMP AUX NOEUDS DE NOM SYMBOLIQUE DEPL',),);\n");
5155  fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESU, NOM_CHAM='REAC_NODA', SOUS_TITRE='CHAMP AUX NOEUDS DE NOM SYMBOLIQUE FORCE_REACTION',),);\n");
5156  }
5157 if (coderesu[4]=='1') // Contraintes aux noeuds (à partir des déplacements)
5158  {
5159  fprintf(in,"\n# CONTRAINTES AUX NOEUDS A PARTIR DES DEPLACEMENTS\n");
5160  if (coderesu[1]=='1')
5161  {
5162  fprintf(in,"REUINFCO=POST_CHAMP(RESULTAT=RESU, TOUT_ORDRE='OUI', EXTR_COQUE=_F(NOM_CHAM='SIEF_ELNO', NUME_COUCHE=1, NIVE_COUCHE='INF',),);\n");
5163  fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=REUINFCO, NOM_CHAM='SIEF_ELNO', SOUS_TITRE='CHAMP PAR ELEMENT AUX NOEUDS DE NOM SYMBOLIQUE TENSEUR_SIGMA_INF',),);\n");
5164  }
5165  if (coderesu[0]=='1')
5166  {
5167  fprintf(in,"RESMOYCO=POST_CHAMP(RESULTAT=RESU, TOUT_ORDRE='OUI', EXTR_COQUE=_F(NOM_CHAM='SIEF_ELNO', NUME_COUCHE=1, NIVE_COUCHE='MOY',),);\n");
5168  fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESMOYCO, NOM_CHAM='SIEF_ELNO', SOUS_TITRE='CHAMP PAR ELEMENT AUX NOEUDS DE NOM SYMBOLIQUE TENSEUR_SIGMA_MOY',),);\n");
5169  }
5170  if (coderesu[2]=='1')
5171  {
5172  fprintf(in,"RESSUPCO=POST_CHAMP(RESULTAT=RESU, TOUT_ORDRE='OUI', EXTR_COQUE=_F(NOM_CHAM='SIEF_ELNO', NUME_COUCHE=1, NIVE_COUCHE='SUP',),);\n");
5173  fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESSUPCO, NOM_CHAM='SIEF_ELNO', SOUS_TITRE='CHAMP PAR ELEMENT AUX NOEUDS DE NOM SYMBOLIQUE TENSEUR_SIGMA_SUP',),);\n");
5174  }
5175  }
5176 if (coderesu[5]=='1') // Déformations aux noeuds (à partir des déplacements)
5177  {
5178  fprintf(in,"\n# DEFORMATIONS AUX NOEUDS A PARTIR DES DEPLACEMENTS\n");
5179  if (coderesu[1]=='1')
5180  {
5181  fprintf(in,"RESINFDE=POST_CHAMP(RESULTAT=RESU, TOUT_ORDRE='OUI', EXTR_COQUE=_F(NOM_CHAM='EPSI_ELNO', NUME_COUCHE=1, NIVE_COUCHE='INF',),);\n");
5182  fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESINFDE, NOM_CHAM='EPSI_ELNO', SOUS_TITRE='CHAMP PAR ELEMENT AUX NOEUDS DE NOM SYMBOLIQUE TENSEUR_EPS_INF',),);\n");
5183  }
5184  if (coderesu[0]=='1')
5185  {
5186  fprintf(in,"RESMOYDE=POST_CHAMP(RESULTAT=RESU, TOUT_ORDRE='OUI', EXTR_COQUE=_F(NOM_CHAM='EPSI_ELNO', NUME_COUCHE=1, NIVE_COUCHE='MOY',),);\n");
5187  fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESMOYDE, NOM_CHAM='EPSI_ELNO', SOUS_TITRE='CHAMP PAR ELEMENT AUX NOEUDS DE NOM SYMBOLIQUE TENSEUR_EPS_MOY',),);\n");
5188  }
5189  if (coderesu[2]=='1')
5190  {
5191  fprintf(in,"RESSUPDE=POST_CHAMP(RESULTAT=RESU, TOUT_ORDRE='OUI', EXTR_COQUE=_F(NOM_CHAM='EPSI_ELNO', NUME_COUCHE=1, NIVE_COUCHE='SUP',),);\n");
5192  fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESSUPDE, NOM_CHAM='EPSI_ELNO', SOUS_TITRE='CHAMP PAR ELEMENT AUX NOEUDS DE NOM SYMBOLIQUE TENSEUR_EPS_SUP',),);\n");
5193  }
5194  }
5195 if (coderesu[6]=='1') // Contraintes de Von Mises et autres critères (à partir des contraintes aux noeuds)
5196  {
5197  fprintf(in,"\n# CONTRAINTES DE VON MISES AUX NOEUDS A PARTIR DES CONTRAINTES AUX NOEUDS\n");
5198  if (coderesu[1]=='1')
5199  {
5200  fprintf(in,"RESINFCQ=POST_CHAMP(RESULTAT=RESU, TOUT_ORDRE='OUI', EXTR_COQUE=_F(NOM_CHAM='SIEQ_ELNO', NUME_COUCHE=1, NIVE_COUCHE='INF',),);\n");
5201  fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESINFCQ, NOM_CHAM='SIEQ_ELNO', SOUS_TITRE='CHAMP PAR ELEMENT AUX NOEUDS DE NOM SYMBOLIQUE CONTRAINTE_EQUI2_INF',),);\n");
5202  }
5203  if (coderesu[0]=='1')
5204  {
5205  fprintf(in,"RESMOYCQ=POST_CHAMP(RESULTAT=RESU, TOUT_ORDRE='OUI', EXTR_COQUE=_F(NOM_CHAM='SIEQ_ELNO', NUME_COUCHE=1, NIVE_COUCHE='MOY',),);\n");
5206  fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESMOYCQ, NOM_CHAM='SIEQ_ELNO', SOUS_TITRE='CHAMP PAR ELEMENT AUX NOEUDS DE NOM SYMBOLIQUE CONTRAINTE_EQUI2_MOY',),);\n");
5207  }
5208  if (coderesu[0]=='1')
5209  {
5210  fprintf(in,"RESSUPCQ=POST_CHAMP(RESULTAT=RESU, TOUT_ORDRE='OUI', EXTR_COQUE=_F(NOM_CHAM='SIEQ_ELNO', NUME_COUCHE=1, NIVE_COUCHE='SUP',),);\n");
5211  fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESSUPCQ, NOM_CHAM='SIEQ_ELNO', SOUS_TITRE='CHAMP PAR ELEMENT AUX NOEUDS DE NOM SYMBOLIQUE CONTRAINTE_EQUI2_SUP',),);\n");
5212  }
5213  }
5214 if (coderesu[7]=='1') // Énergie de déformation (à partir des déplacements)
5215  {
5216  fprintf(in,"\n# ENERGIE DE DEFORMATION PAR ELEMENT A DES PARTIR DES DEPLACEMENTS\n");
5217  fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESU, NOM_CHAM='EPOT_ELEM',SOUS_TITRE='CHAMP PAR ELEMENT CONSTANT SUR ELEMENT DE NOM SYMBOLIQUE ENERGIE',),);\n");
5218  //fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESU, NOM_CHAM='ERZ1_ELEM',SOUS_TITRE='CHAMP PAR ELEMENT CONSTANT SUR ELEMENT DE NOM SYMBOLIQUE ERREUR',),);\n");
5219  }
5220 }
5221 
5222 
5224 {
5225 fprintf(in,"\n# PROJECTION DES RESULTATS------------------------------------------------------\n");
5226 fprintf(in,"\n");
5227 if (coderesu[3]=='1')
5228  {
5229  fprintf(in,"\n# PROJECTION DEPLACEMENTS \n");
5230  fprintf(in,"RESU1=PROJ_CHAMP(RESULTAT=RESU,MODELE_1=MODCAL,MODELE_2=MODORI,);\n\n");
5231  }
5232 if (coderesu[5]=='1')
5233  {
5234  fprintf(in,"\n# PROJECTION DEFORMATIONS AUX NOEUDS \n");
5235  if (coderesu[0]=='1')
5236  {
5237  fprintf(in,"RESMOYDE=POST_CHAMP(RESULTAT=RESU, TOUT_ORDRE='OUI', EXTR_COQUE=_F(NOM_CHAM='EPSI_ELNO', NUME_COUCHE=1, NIVE_COUCHE='MOY',),);\n");
5238  fprintf(in,"RESMOYDE=CALC_CHAMP(reuse=RESMOYDE, RESULTAT=RESMOYDE, TOUT='OUI', DEFORMATION='EPSI_NOEU',);\n");
5239  fprintf(in,"RESUMOY1=PROJ_CHAMP(RESULTAT=RESMOYDE,NOM_CHAM='EPSI_NOEU',MODELE_1=MODCAL,MODELE_2=MODORI,);\n");
5240  }
5241  if (coderesu[1]=='1')
5242  {
5243  fprintf(in,"RESINFDE=POST_CHAMP(RESULTAT=RESU, TOUT_ORDRE='OUI', EXTR_COQUE=_F(NOM_CHAM='EPSI_ELNO', NUME_COUCHE=1, NIVE_COUCHE='INF',),);\n");
5244  fprintf(in,"RESINFDE=CALC_CHAMP(reuse=RESINFDE, RESULTAT=RESINFDE, TOUT='OUI', DEFORMATION='EPSI_NOEU',);\n");
5245  fprintf(in,"RESUINF1=PROJ_CHAMP(RESULTAT=RESINFDE,NOM_CHAM='EPSI_NOEU',MODELE_1=MODCAL,MODELE_2=MODORI,);\n");
5246  }
5247  if (coderesu[2]=='1')
5248  {
5249  fprintf(in,"RESSUPDE=POST_CHAMP(RESULTAT=RESU, TOUT_ORDRE='OUI', EXTR_COQUE=_F(NOM_CHAM='EPSI_ELNO', NUME_COUCHE=1, NIVE_COUCHE='SUP',),);\n");
5250  fprintf(in,"RESSUPDE=CALC_CHAMP(reuse=RESSUPDE, RESULTAT=RESSUPDE, TOUT='OUI', DEFORMATION='EPSI_NOEU',);\n");
5251  fprintf(in,"RESUSUP1=PROJ_CHAMP(RESULTAT=RESSUPDE,NOM_CHAM='EPSI_NOEU',MODELE_1=MODCAL,MODELE_2=MODORI,);\n");
5252  }
5253  }
5254 if (coderesu[4]=='1')
5255  {
5256  fprintf(in,"\n# PROJECTION DES CONTRAINTES AUX NOEUDS \n");
5257  if (coderesu[0]=='1')
5258  {
5259  fprintf(in,"RESMOYCO=POST_CHAMP(RESULTAT=RESU, TOUT_ORDRE='OUI', EXTR_COQUE=_F(NOM_CHAM='SIEF_ELNO', NUME_COUCHE=1, NIVE_COUCHE='MOY',),);\n");
5260  fprintf(in,"RESMOYCO=CALC_CHAMP(reuse=RESMOYCO, RESULTAT=RESMOYCO, TOUT='OUI', CONTRAINTE='SIEF_NOEU',);\n");
5261  fprintf(in,"RESUMOY2=PROJ_CHAMP(RESULTAT=RESMOYCO,NOM_CHAM='SIEF_NOEU',MODELE_1=MODCAL,MODELE_2=MODORI,);\n");
5262  }
5263  if (coderesu[1]=='1')
5264  {
5265  fprintf(in,"RESINFCO=POST_CHAMP(RESULTAT=RESU, TOUT_ORDRE='OUI', EXTR_COQUE=_F(NOM_CHAM='SIEF_ELNO', NUME_COUCHE=1, NIVE_COUCHE='INF',),);\n");
5266  fprintf(in,"RESINFCO=CALC_CHAMP(reuse=RESINFCO, RESULTAT=RESINFCO, TOUT='OUI', CONTRAINTE='SIEF_NOEU',);\n");
5267  fprintf(in,"RESUINF2=PROJ_CHAMP(RESULTAT=RESINFCO,NOM_CHAM='SIEF_NOEU',MODELE_1=MODCAL,MODELE_2=MODORI,);\n");
5268  }
5269  if (coderesu[2]=='1')
5270  {
5271  fprintf(in,"RESSUPCO=POST_CHAMP(RESULTAT=RESU, TOUT_ORDRE='OUI', EXTR_COQUE=_F(NOM_CHAM='SIEF_ELNO', NUME_COUCHE=1, NIVE_COUCHE='SUP',),);\n");
5272  fprintf(in,"RESSUPCO=CALC_CHAMP(reuse=RESSUPCO, RESULTAT=RESSUPCO, TOUT='OUI', CONTRAINTE='SIEF_NOEU',);\n");
5273  fprintf(in,"RESUSUP2=PROJ_CHAMP(RESULTAT=RESSUPCO,NOM_CHAM='SIEF_NOEU',MODELE_1=MODCAL,MODELE_2=MODORI,);\n");
5274  }
5275  }
5276 if (coderesu[6]=='1')
5277  {
5278  fprintf(in,"\n# PROJECTION DES CONTRAINTES EQUIVALENTES AUX NOEUDS \n");
5279  if (coderesu[0]=='1')
5280  {
5281  fprintf(in,"RESMOYCQ=POST_CHAMP(RESULTAT=RESU, TOUT_ORDRE='OUI', EXTR_COQUE=_F(NOM_CHAM='SIEQ_ELNO', NUME_COUCHE=1, NIVE_COUCHE='MOY',),);\n");
5282  fprintf(in,"RESMOYCQ=CALC_CHAMP(reuse=RESMOYCQ, RESULTAT=RESMOYCQ, TOUT='OUI', CRITERES='SIEQ_NOEU',);\n");
5283  fprintf(in,"RESUMOY3=PROJ_CHAMP(RESULTAT=RESMOYCQ,NOM_CHAM='SIEQ_NOEU',MODELE_1=MODCAL,MODELE_2=MODORI,);\n");
5284  }
5285  if (coderesu[1]=='1')
5286  {
5287  fprintf(in,"RESINFCQ=POST_CHAMP(RESULTAT=RESU, TOUT_ORDRE='OUI', EXTR_COQUE=_F(NOM_CHAM='SIEQ_ELNO', NUME_COUCHE=1, NIVE_COUCHE='INF',),);\n");
5288  fprintf(in,"RESINFCQ=CALC_CHAMP(reuse=RESINFCQ, RESULTAT=RESINFCQ, TOUT='OUI', CRITERES='SIEQ_NOEU',);\n");
5289  fprintf(in,"RESUINF3=PROJ_CHAMP(RESULTAT=RESINFCQ,NOM_CHAM='SIEQ_NOEU',MODELE_1=MODCAL,MODELE_2=MODORI,);\n");
5290  }
5291  if (coderesu[2]=='1')
5292  {
5293  fprintf(in,"RESSUPCQ=POST_CHAMP(RESULTAT=RESU, TOUT_ORDRE='OUI', EXTR_COQUE=_F(NOM_CHAM='SIEQ_ELNO', NUME_COUCHE=1, NIVE_COUCHE='SUP',),);\n");
5294  fprintf(in,"RESSUPCQ=CALC_CHAMP(reuse=RESSUPCQ, RESULTAT=RESSUPCQ, TOUT='OUI', CRITERES='SIEQ_NOEU',);\n");
5295  fprintf(in,"RESUSUP3=PROJ_CHAMP(RESULTAT=RESSUPCQ,NOM_CHAM='SIEQ_NOEU',MODELE_1=MODCAL,MODELE_2=MODORI,);\n");
5296  }
5297  }
5298 if (coderesu[7]=='1')
5299  {
5300  fprintf(in,"\n# PROJECTION ENERGIE DE DEFORMATION \n");
5301  fprintf(in,"RESU2=PROJ_CHAMP(METHODE='COLLOCATION',RESULTAT=RESU,NOM_CHAM='EPOT_ELEM',TYPE_CHAM='NOEU',MODELE_1=MODCAL,MODELE_2=MODORI,);\n\n");
5302  //fprintf(in,"RESU2=PROJ_CHAMP(METHODE='COLLOCATION',RESULTAT=RESU,NOM_CHAM='ERZ1_ELEM',TYPE_CHAM='NOEU',MODELE_1=MODMECA,MODELE_2=MOD,);\n\n");
5303  }
5304 fprintf(in,"\n# IMPRESSION DES RESULTATS------------------------------------------------------\n");
5305 fprintf(in,"\n");
5306 if (coderesu[3]=='1') // Déplacements aux noeuds
5307  {
5308  fprintf(in,"\n# DEPLACEMENTS\n");
5309  fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESU1, NOM_CHAM='DEPL', SOUS_TITRE='CHAMP AUX NOEUDS DE NOM SYMBOLIQUE DEPL',),);\n");
5310  fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESU1, NOM_CHAM='REAC_NODA', SOUS_TITRE='CHAMP AUX NOEUDS DE NOM SYMBOLIQUE FORCE_REACTION',),);\n");
5311  }
5312 if (coderesu[5]=='1') // Déformations aux noeuds (à partir des déplacements)
5313  {
5314  fprintf(in,"\n# DEFORMATIONS AUX NOEUDS A PARTIR DES DEPLACEMENTS\n");
5315  if (coderesu[1]=='1') fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESUINF1, NOM_CHAM='EPSI_NOEU', SOUS_TITRE='CHAMP AUX NOEUDS DE NOM SYMBOLIQUE TENSEUR_EPS_INF',),);\n");
5316  if (coderesu[0]=='1') fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESUMOY1, NOM_CHAM='EPSI_NOEU', SOUS_TITRE='CHAMP AUX NOEUDS DE NOM SYMBOLIQUE TENSEUR_EPS_MOY',),);\n");
5317  if (coderesu[2]=='1') fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESUSUP1, NOM_CHAM='EPSI_NOEU', SOUS_TITRE='CHAMP AUX NOEUDS DE NOM SYMBOLIQUE TENSEUR_EPS_SUP',),);\n");
5318  }
5319 if (coderesu[4]=='1') // Contraintes aux noeuds (à partir des déplacements)
5320  {
5321  fprintf(in,"\n# CONTRAINTES AUX NOEUDS A PARTIR DES DEPLACEMENTS\n");
5322  if (coderesu[1]=='1') fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESUINF2, NOM_CHAM='SIEF_NOEU', SOUS_TITRE='CHAMP AUX NOEUDS DE NOM SYMBOLIQUE TENSEUR_SIGMA_INF',),);\n");
5323  if (coderesu[0]=='1') fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESUMOY2, NOM_CHAM='SIEF_NOEU', SOUS_TITRE='CHAMP AUX NOEUDS DE NOM SYMBOLIQUE TENSEUR_SIGMA_MOY',),);\n");
5324  if (coderesu[2]=='1') fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESUSUP2, NOM_CHAM='SIEF_NOEU', SOUS_TITRE='CHAMP AUX NOEUDS DE NOM SYMBOLIQUE TENSEUR_SIGMA_SUP',),);\n");
5325  }
5326 if (coderesu[6]=='1') // Contraintes de Von Mises et autres critères (à partir des contraintes aux noeuds)
5327  {
5328  fprintf(in,"\n# CONTRAINTES DE VON MISES AUX NOEUDS A PARTIR DES CONTRAINTES AUX NOEUDS\n");
5329  if (coderesu[1]=='1') fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESUINF3, NOM_CHAM='SIEQ_NOEU', SOUS_TITRE='CHAMP AUX NOEUDS DE NOM SYMBOLIQUE CONTRAINTE_EQUI2_INF',),);\n");
5330  if (coderesu[0]=='1') fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESUMOY3, NOM_CHAM='SIEQ_NOEU', SOUS_TITRE='CHAMP AUX NOEUDS DE NOM SYMBOLIQUE CONTRAINTE_EQUI2_MOY',),);\n");
5331  if (coderesu[2]=='1') fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESUSUP3, NOM_CHAM='SIEQ_NOEU', SOUS_TITRE='CHAMP AUX NOEUDS DE NOM SYMBOLIQUE CONTRAINTE_EQUI2_SUP',),);\n");
5332  }
5333 if (coderesu[7]=='1') // Énergie de déformation (à partir des déplacements)
5334  {
5335  fprintf(in,"\n# ENERGIE DE DEFORMATION \n");
5336  fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESU, NOM_CHAM='EPOT_ELEM',SOUS_TITRE='CHAMP PAR ELEMENT CONSTANT SUR ELEMENT DE NOM SYMBOLIQUE ENERGIE',),);\n");
5337  // if (version>10.9) fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESU, NOM_CHAM='ERZ1_ELEM',SOUS_TITRE='CHAMP PAR ELEMENT CONSTANT SUR ELEMENT DE NOM SYMBOLIQUE ERREUR',),);\n");
5338  }
5339 }
5340 
5341 
5343 {
5344  fprintf(in,"\n# IMPRESSION DES RESULTATS------------------------------------------------------\n");
5345  fprintf(in,"\n");
5346  fprintf(in,"# POST-TRAITMENTS--------------------------------------------------------------\n\n");
5347  if((int)param_aster.get_valeur("It_resultat")!=0)
5348  {
5349  fprintf(in,"IMPR_RESU(MODELE=MODCAL,FORMAT='RESULTAT', RESU=_F(RESULTAT=TEMP,NOM_CHAM='TEMP',SOUS_TITRE='CHAMP AUX NOEUDS DE NOM SYMBOLIQUE TEMPERATURE',LIST_INST = lst_arch),);");
5350  }
5351  else
5352  fprintf(in,"IMPR_RESU(MODELE=MODCAL,FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=TEMP,NOM_CHAM='TEMP',SOUS_TITRE='CHAMP AUX NOEUDS DE NOM SYMBOLIQUE TEMPERATURE'),);\n");
5353  fprintf(in,"IMPR_RESU(MODELE=MODCAL,FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=FLUX_C,NOM_CHAM='FLUX_ELGA',SOUS_TITRE='CHAMP PAR ELEMENT AUX POINTS DE GAUSS DE NOM SYMBOLIQUE FLUX'),);\n");
5354 }
5355 
5356 
5357 void MG_EXPORT::aster_ecrire_comm_statique_non_lineaire(double version,FILE* in, MG_GEOMETRIE* geo,bool vol,bool coque,bool poutre,bool desactiveerreur,std::vector< std::string >& chargepresente, char* coderesu, std::string relation, std::string deformation)
5358 {
5359 int PAS;
5360 double DEBUT,JUSQU_A;
5361 double PRECISION;
5362 int INCR_MAT_TAN_PRED,IT_MAT_TAN_COH;
5363 DEBUT=param_aster.get_valeur("Ti");
5364 PAS=(int)param_aster.get_valeur("Pas");
5365 JUSQU_A=param_aster.get_valeur("Tf");
5366 INCR_MAT_TAN_PRED=(int)param_aster.get_valeur("Incr_mat_tan_pred");
5367 IT_MAT_TAN_COH=(int)param_aster.get_valeur("It_mat_tan_coh");
5368 fprintf(in,"\n# Liste d'instants de calculs------------------------------------------------\n");
5369 fprintf(in,"lst_reel=DEFI_LIST_REEL(DEBUT=%lf,INTERVALLE=(_F(JUSQU_A=%lf,NOMBRE=%d,),",DEBUT,JUSQU_A,PAS);
5370 int decharge=(int)param_aster.get_valeur("Pas_decharge");
5371 int palier=(int)param_aster.get_valeur("Pas_palier");
5372 if (decharge!=0)
5373  {
5374  if (palier!=0)
5375  fprintf(in,"_F(JUSQU_A=%lf,NOMBRE=%d,),",JUSQU_A+palier*1.0/PAS*(JUSQU_A-DEBUT),palier);
5376  fprintf(in,"_F(JUSQU_A=%lf,NOMBRE=%d,),",JUSQU_A+(palier+decharge)*1.0/PAS*(JUSQU_A-DEBUT),decharge);
5377  }
5378 fprintf(in,"),");
5379 fprintf(in,");\n\n");
5380 int niv=(int)param_aster.get_valeur("Niv_subd");
5381 int passub=(int)param_aster.get_valeur("Pas_subd");
5382 if (passub*niv!=0)
5383  fprintf(in,"lst_inst=DEFI_LIST_INST(DEFI_LIST= _F(LIST_INST = lst_reel), ECHEC = _F(SUBD_NIVEAU =%d , SUBD_PAS=%d ),);\n\n",niv,passub);
5384 else
5385  fprintf(in,"lst_inst=DEFI_LIST_INST(DEFI_LIST= _F(LIST_INST = lst_reel),);\n\n");
5386 int NB_PAS_ARCHIVE = (int)param_aster.get_valeur("It_resultat");
5387 std::string str_archive;
5388 std::string str_inst_calc_champ;
5389 if(NB_PAS_ARCHIVE!=0)
5390 {
5391  fprintf(in,"\n# Liste d'instants d'archivage------------------------------------------------\n");
5392  fprintf(in,"lst_arch=DEFI_LIST_REEL(DEBUT=%lf,INTERVALLE=(_F(JUSQU_A=%lf,NOMBRE=%d,),",DEBUT,JUSQU_A,NB_PAS_ARCHIVE);
5393  if (decharge!=0)
5394  fprintf(in,"_F(JUSQU_A=%lf,NOMBRE=1,),",JUSQU_A+(palier+decharge)*1.0/PAS*(JUSQU_A-DEBUT));
5395  fprintf(in,"),);\n\n");
5396  str_archive = "ARCHIVAGE = _F(LIST_INST = lst_arch,),";
5397  str_inst_calc_champ = "LIST_INST = lst_arch";
5398 }
5399 else
5400 {
5401  char chr_jusqu_a[100]; sprintf(chr_jusqu_a,"%lf",JUSQU_A+(palier+decharge)*1.0/PAS*(JUSQU_A-DEBUT));
5402  std::string str_jusqu_a = chr_jusqu_a;
5403  str_archive = "ARCHIVAGE = _F(INST = " + str_jusqu_a + ",),";
5404  str_inst_calc_champ = "INST = " + str_jusqu_a;
5405 }
5406 fprintf(in,"# CALCUL STATIQUE NON LINEAIRE ELASTIQUE--------------------------------------------------------------\n\n");
5407 std::string comportement="COMP_INCR";
5408 if (version>12) comportement="COMPORTEMENT";
5409 
5410 fprintf(in,
5411 "RESU=STAT_NON_LINE(MODELE=MODCAL,\n\
5412  %s,\n\
5413  CHAM_MATER=CHMAT,\n\
5414  %s =_F(RELATION='%s', DEFORMATION ='%s'),\n\
5415  INCREMENT =_F(LIST_INST=lst_inst,),\n\
5416  NEWTON=_F(REAC_INCR=%d,REAC_ITER=%d,),\n",aster_ecrire_comm_solveur().c_str(),comportement.c_str(),relation.c_str(),deformation.c_str(),INCR_MAT_TAN_PRED,IT_MAT_TAN_COH);
5417 if (coque) fprintf(in," CARA_ELEM=CARA_COQ,\n");
5418 fprintf(in," EXCIT=(");
5419 fprintf(in,
5420 "_F(CHARGE=%s,),",chargepresente[0].c_str());
5421 for (int i=1;i<chargepresente.size();i++)
5422  fprintf(in,
5423 "\n _F(CHARGE=%s,),",chargepresente[i].c_str());
5424 fprintf(in,"),\n");
5425 fprintf(in,
5426 " %s\n",str_archive.c_str());
5427  fprintf(in,");\n\n");
5428 
5429 fprintf(in,"# REACTION NODALE\n");
5430 if (coque) fprintf(in,"RESU=CALC_CHAMP(reuse=RESU,RESULTAT=RESU,TOUT='OUI', CARA_ELEM=CARA_COQ, FORCE='REAC_NODA',%s,);",str_inst_calc_champ.c_str());
5431 else fprintf(in,"RESU=CALC_CHAMP(reuse=RESU,RESULTAT=RESU,TOUT='OUI', FORCE='REAC_NODA',%s,);",str_inst_calc_champ.c_str());
5432 
5433 std::string lieu ="NOEU";
5434 int val=(int)param_aster.get_valeur((char*)"Noeud_ele");
5435 if (val==1) lieu="ELNO";
5436 if (val==2) lieu="ELGA";
5437 if (coque) lieu="ELNO";
5438 char* plieu=(char*)lieu.c_str();
5439 if ((coderesu)[5]=='1') // Déformations (à partir des déplacements)
5440  {
5441  fprintf(in,"\n# DEFORMATIONS AUX NOEUDS A PARTIR DES DEPLACEMENTS\n");
5442  if (coque) fprintf(in,"RESU=CALC_CHAMP(reuse=RESU, RESULTAT=RESU, TOUT='OUI', CARA_ELEM=CARA_COQ, DEFORMATION='EPSI_%s',%s,);\n",plieu,str_inst_calc_champ.c_str());
5443  else fprintf(in,"RESU=CALC_CHAMP(reuse=RESU, RESULTAT=RESU, TOUT='OUI', DEFORMATION='EPSI_%s',%s,);\n",plieu,str_inst_calc_champ.c_str());
5444  }
5445 if ((coderesu[4]=='1') || (coderesu[6]=='1')) // Contraintes aux noeuds (à partir des contraintes aux points de Gauss calculées par défaut)
5446  {
5447  if (val!=2)
5448  {
5449  fprintf(in,"\n# CONTRAINTES AUX NOEUDS A PARTIR DES DEPLACEMENTS\n");
5450  if (coque) fprintf(in,"RESU=CALC_CHAMP(reuse=RESU, RESULTAT=RESU, TOUT='OUI', CARA_ELEM=CARA_COQ, CONTRAINTE='SIEF_%s',%s,);\n",plieu,str_inst_calc_champ.c_str());
5451  else fprintf(in,"RESU=CALC_CHAMP(reuse=RESU, RESULTAT=RESU, TOUT='OUI', CONTRAINTE='SIEF_%s',%s,);\n",plieu,str_inst_calc_champ.c_str());
5452  }
5453  }
5454 if (coderesu[6]=='1') // Contraintes de Von Mises et autres critères (à partir des contraintes aux noeuds)
5455  {
5456  fprintf(in,"\n# CONTRAINTES DE VON MISES AUX NOEUDS A PARTIR DES CONTRAINTES AUX NOEUDS\n");
5457  if (coque) fprintf(in,"RESU=CALC_CHAMP(reuse=RESU, RESULTAT=RESU, TOUT='OUI', CARA_ELEM=CARA_COQ, CRITERES='SIEQ_%s',%s,);\n",plieu,str_inst_calc_champ.c_str());
5458  else fprintf(in,"RESU=CALC_CHAMP(reuse=RESU, RESULTAT=RESU, TOUT='OUI', CRITERES='SIEQ_%s',%s,);\n",plieu,str_inst_calc_champ.c_str());
5459  }
5460 
5461 }
5462 
5463 
5464 
5465 
5466 
5467 
5469 {
5470  std::string lieu ="NOEU";
5471  std::string champ="AUX NOEUDS";
5472  int val=(int)param_aster.get_valeur((char*)"Noeud_ele");
5473  if (val==1)
5474  {
5475  lieu="ELNO";
5476  champ="PAR ELEMENT AUX NOEUDS" ;
5477  }
5478  if (val==2)
5479  {
5480  lieu="ELGA";
5481  champ="PAR ELEMENT AUX POINTS DE GAUSS" ;
5482  }
5483  char* plieu=(char*)lieu.c_str();
5484  char* pchamp=(char*)champ.c_str();
5485  std::string archivage;
5486  if((int)param_aster.get_valeur("It_resultat")!=0) archivage = "LIST_INST = lst_arch";
5487  else
5488  {
5489  int DEBUT=param_aster.get_valeur("Ti");
5490  int PAS=(int)param_aster.get_valeur("Pas");
5491  int JUSQU_A=param_aster.get_valeur("Tf");
5492  int decharge=(int)param_aster.get_valeur("Pas_decharge");
5493  int palier=(int)param_aster.get_valeur("Pas_palier");
5494  char chr_jusqu_a[100]; sprintf(chr_jusqu_a,"%lf",JUSQU_A+(palier+decharge)*1.0/PAS*(JUSQU_A-DEBUT));
5495  std::string str_jusqu_a = chr_jusqu_a;
5496  archivage = "INST = " + str_jusqu_a;
5497  }
5498 fprintf(in,"\n# IMPRESSION DES RESULTATS------------------------------------------------------\n");
5499 if (coderesu[3]=='1') // Déplacements (résultats bruts du calcul par éléments finis)
5500  {
5501  fprintf(in,"\n# DEPLACEMENTS\n");
5502  if (avec3d) fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESU, NOM_CHAM='DEPL', SOUS_TITRE='CHAMP AUX NOEUDS DE NOM SYMBOLIQUE DEPL',%s,),);\n",archivage.c_str());
5503  else fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESU, NOM_CHAM='DEPL', SOUS_TITRE='CHAMP AUX NOEUDS DE NOM SYMBOLIQUE DEPL_2D',%s,),);\n",archivage.c_str());
5504  fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESU, NOM_CHAM='REAC_NODA', SOUS_TITRE='CHAMP AUX NOEUDS DE NOM SYMBOLIQUE FORCE_REACTION',%s,),);\n",archivage.c_str());
5505  }
5506 if (coderesu[5]=='1') // Déformations (à partir des déplacements)
5507  {
5508  fprintf(in,"\n# DEFORMATIONS AUX NOEUDS A PARTIR DES DEPLACEMENTS\n");
5509  if (avec3d) fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESU, NOM_CHAM='EPSI_%s',SOUS_TITRE='CHAMP %s DE NOM SYMBOLIQUE TENSEUR_EPS',%s,),);\n",plieu,pchamp,archivage.c_str());
5510  else fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESU, NOM_CHAM='EPSI_%s',SOUS_TITRE='CHAMP %s DE NOM SYMBOLIQUE TENSEUR_EPS_2D',%s,),);\n",plieu,pchamp,archivage.c_str());
5511  }
5512 if (coderesu[4]=='1') // Contraintes aux noeuds (à partir des contraintes aux points de Gauss calculées par défaut)
5513  {
5514  fprintf(in,"\n# CONTRAINTES AUX NOEUDS A PARTIR DES DEPLACEMENTS\n");
5515  if (avec3d) fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESU, NOM_CHAM='SIEF_%s',SOUS_TITRE='CHAMP %s DE NOM SYMBOLIQUE TENSEUR_SIGMA',%s,),);\n",plieu,pchamp,archivage.c_str());
5516  else fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESU, NOM_CHAM='SIEF_%s',SOUS_TITRE='CHAMP %s DE NOM SYMBOLIQUE TENSEUR_SIGMA_2D',%s,),);\n",plieu,pchamp,archivage.c_str());
5517  }
5518 if (coderesu[6]=='1') // Contraintes de Von Mises et autres critères (à partir des contraintes aux noeuds)
5519  {
5520  fprintf(in,"\n# CONTRAINTES DE VON MISES AUX NOEUDS A PARTIR DES CONTRAINTES AUX NOEUDS\n");
5521  if (avec3d) fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESU, NOM_CHAM='SIEQ_%s',SOUS_TITRE='CHAMP %s DE NOM SYMBOLIQUE CONTRAINTE_EQUI2',%s,),);\n",plieu,pchamp,archivage.c_str());
5522  else fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESU, NOM_CHAM='SIEQ_%s',SOUS_TITRE='CHAMP %s DE NOM SYMBOLIQUE CONTRAINTE_EQUI2_2D',%s,),);\n",plieu,pchamp,archivage.c_str());
5523  }
5524 }
5525 
5527 {
5528 std::string archivage;
5529 
5530 if((int)param_aster.get_valeur("It_resultat")!=0) archivage = "LIST_INST = lst_arch";
5531 else
5532  {
5533  int DEBUT=param_aster.get_valeur("Ti");
5534  int PAS=(int)param_aster.get_valeur("Pas");
5535  int JUSQU_A=param_aster.get_valeur("Tf");
5536  int decharge=(int)param_aster.get_valeur("Pas_decharge");
5537  int palier=(int)param_aster.get_valeur("Pas_palier");
5538  char chr_jusqu_a[100]; sprintf(chr_jusqu_a,"%lf",JUSQU_A+(palier+decharge)*1.0/PAS*(JUSQU_A-DEBUT));
5539  std::string str_jusqu_a = chr_jusqu_a;
5540  archivage = "INST = " + str_jusqu_a;
5541  }
5542 fprintf(in,"\n# IMPRESSION DES RESULTATS------------------------------------------------------\n");
5543 fprintf(in,"\n");
5544 if (coderesu[3]=='1') // Déplacements aux noeuds (résultats bruts du calcul par éléments finis)
5545  {
5546  fprintf(in,"\n# DEPLACEMENTS\n");
5547  fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESU, NOM_CHAM='DEPL', SOUS_TITRE='CHAMP AUX NOEUDS DE NOM SYMBOLIQUE DEPL',%s,),);\n",archivage.c_str());
5548  fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESU, NOM_CHAM='REAC_NODA', SOUS_TITRE='CHAMP AUX NOEUDS DE NOM SYMBOLIQUE FORCE_REACTION',%s,),);\n",archivage.c_str());
5549  }
5550 if (coderesu[4]=='1') // Contraintes aux noeuds (à partir des déplacements)
5551  {
5552  fprintf(in,"\n# CONTRAINTES AUX NOEUDS A PARTIR DES DEPLACEMENTS\n");
5553  if (coderesu[1]=='1')
5554  {
5555  fprintf(in,"REUINFCO=POST_CHAMP(RESULTAT=RESU, TOUT_ORDRE='OUI', EXTR_COQUE=_F(NOM_CHAM='SIEF_ELNO', NUME_COUCHE=1, NIVE_COUCHE='INF',),);\n");
5556  fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=REUINFCO, NOM_CHAM='SIEF_ELNO', SOUS_TITRE='CHAMP PAR ELEMENT AUX NOEUDS DE NOM SYMBOLIQUE TENSEUR_SIGMA_INF',%s,),);\n",archivage.c_str());
5557  }
5558  if (coderesu[0]=='1')
5559  {
5560  fprintf(in,"RESMOYCO=POST_CHAMP(RESULTAT=RESU, TOUT_ORDRE='OUI', EXTR_COQUE=_F(NOM_CHAM='SIEF_ELNO', NUME_COUCHE=1, NIVE_COUCHE='MOY',),);\n");
5561  fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESMOYCO, NOM_CHAM='SIEF_ELNO', SOUS_TITRE='CHAMP PAR ELEMENT AUX NOEUDS DE NOM SYMBOLIQUE TENSEUR_SIGMA_MOY',%s,),);\n",archivage.c_str());
5562  }
5563  if (coderesu[2]=='1')
5564  {
5565  fprintf(in,"RESSUPCO=POST_CHAMP(RESULTAT=RESU, TOUT_ORDRE='OUI', EXTR_COQUE=_F(NOM_CHAM='SIEF_ELNO', NUME_COUCHE=1, NIVE_COUCHE='SUP',),);\n");
5566  fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESSUPCO, NOM_CHAM='SIEF_ELNO', SOUS_TITRE='CHAMP PAR ELEMENT AUX NOEUDS DE NOM SYMBOLIQUE TENSEUR_SIGMA_SUP',%s,),);\n",archivage.c_str());
5567  }
5568  }
5569 if (coderesu[5]=='1') // Déformations aux noeuds (à partir des déplacements)
5570  {
5571  fprintf(in,"\n# DEFORMATIONS AUX NOEUDS A PARTIR DES DEPLACEMENTS\n");
5572  if (coderesu[1]=='1')
5573  {
5574  fprintf(in,"RESINFDE=POST_CHAMP(RESULTAT=RESU, TOUT_ORDRE='OUI', EXTR_COQUE=_F(NOM_CHAM='EPSI_ELNO', NUME_COUCHE=1, NIVE_COUCHE='INF',),);\n");
5575  fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESINFDE, NOM_CHAM='EPSI_ELNO', SOUS_TITRE='CHAMP PAR ELEMENT AUX NOEUDS DE NOM SYMBOLIQUE TENSEUR_EPS_INF',%s,),);\n",archivage.c_str());
5576  }
5577  if (coderesu[0]=='1')
5578  {
5579  fprintf(in,"RESMOYDE=POST_CHAMP(RESULTAT=RESU, TOUT_ORDRE='OUI', EXTR_COQUE=_F(NOM_CHAM='EPSI_ELNO', NUME_COUCHE=1, NIVE_COUCHE='MOY',),);\n");
5580  fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESMOYDE, NOM_CHAM='EPSI_ELNO', SOUS_TITRE='CHAMP PAR ELEMENT AUX NOEUDS DE NOM SYMBOLIQUE TENSEUR_EPS_MOY',%s,),);\n",archivage.c_str());
5581  }
5582  if (coderesu[2]=='1')
5583  {
5584  fprintf(in,"RESSUPDE=POST_CHAMP(RESULTAT=RESU, TOUT_ORDRE='OUI', EXTR_COQUE=_F(NOM_CHAM='EPSI_ELNO', NUME_COUCHE=1, NIVE_COUCHE='SUP',),);\n");
5585  fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESSUPDE, NOM_CHAM='EPSI_ELNO', SOUS_TITRE='CHAMP PAR ELEMENT AUX NOEUDS DE NOM SYMBOLIQUE TENSEUR_EPS_SUP',%s,),);\n",archivage.c_str());
5586  }
5587  }
5588 if (coderesu[6]=='1') // Contraintes de Von Mises et autres critères (à partir des contraintes aux noeuds)
5589  {
5590  fprintf(in,"\n# CONTRAINTES DE VON MISES AUX NOEUDS A PARTIR DES CONTRAINTES AUX NOEUDS\n");
5591  if (coderesu[1]=='1')
5592  {
5593  fprintf(in,"RESINFCQ=POST_CHAMP(RESULTAT=RESU, TOUT_ORDRE='OUI', EXTR_COQUE=_F(NOM_CHAM='SIEQ_ELNO', NUME_COUCHE=1, NIVE_COUCHE='INF',),);\n");
5594  fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESINFCQ, NOM_CHAM='SIEQ_ELNO', SOUS_TITRE='CHAMP PAR ELEMENT AUX NOEUDS DE NOM SYMBOLIQUE CONTRAINTE_EQUI2_INF',%s,),);\n",archivage.c_str());
5595  }
5596  if (coderesu[0]=='1')
5597  {
5598  fprintf(in,"RESMOYCQ=POST_CHAMP(RESULTAT=RESU, TOUT_ORDRE='OUI', EXTR_COQUE=_F(NOM_CHAM='SIEQ_ELNO', NUME_COUCHE=1, NIVE_COUCHE='MOY',),);\n");
5599  fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESMOYCQ, NOM_CHAM='SIEQ_ELNO', SOUS_TITRE='CHAMP PAR ELEMENT AUX NOEUDS DE NOM SYMBOLIQUE CONTRAINTE_EQUI2_MOY',%s,),);\n",archivage.c_str());
5600  }
5601  if (coderesu[0]=='1')
5602  {
5603  fprintf(in,"RESSUPCQ=POST_CHAMP(RESULTAT=RESU, TOUT_ORDRE='OUI', EXTR_COQUE=_F(NOM_CHAM='SIEQ_ELNO', NUME_COUCHE=1, NIVE_COUCHE='SUP',),);\n");
5604  fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESSUPCQ, NOM_CHAM='SIEQ_ELNO', SOUS_TITRE='CHAMP PAR ELEMENT AUX NOEUDS DE NOM SYMBOLIQUE CONTRAINTE_EQUI2_SUP',%s,),);\n",archivage.c_str());
5605  }
5606  }
5607 if (coderesu[7]=='1') // Énergie de déformation (à partir des déplacements)
5608  {
5609  //fprintf(in,"\n# ENERGIE DE DEFORMATION PAR ELEMENT A DES PARTIR DES DEPLACEMENTS\n");
5610  //fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESU, NOM_CHAM='EPOT_ELEM',SOUS_TITRE='CHAMP PAR ELEMENT CONSTANT SUR ELEMENT DE NOM SYMBOLIQUE ENERGIE',),);\n");
5611  //fprintf(in,"IMPR_RESU(FORMAT='RESULTAT', UNITE=8, RESU=_F(RESULTAT=RESU, NOM_CHAM='ERZ1_ELEM',SOUS_TITRE='CHAMP PAR ELEMENT CONSTANT SUR ELEMENT DE NOM SYMBOLIQUE ERREUR',),);\n");
5612  }
5613 }
5614 
5615 
5617 {
5618  MG_GEOM_FONCTION *fonction;
5619  for(long i=0;i<geo->get_nb_mg_volume();i++)
5620  {
5621  double val_CM=0;
5622  geo->get_mg_volume(i)->get_valeur_ccf((char*)"CM",val_CM);
5623  if (!(val_CM>0))
5624  {
5625  geo->get_mg_volume(i)->get_valeur_ccf((char*)"cm",val_CM);
5626  val_CM=geo->get_mg_geom_fonction((int)val_CM-1)->get_id();
5627  }
5628  if(val_CM>0)
5629  {
5630  char chr_nom_fonction[8];
5631  sprintf(chr_nom_fonction,"%d",(int)val_CM);
5632  std::string str_nom_fonction = chr_nom_fonction;
5633  str_nom_fonction = "cm" + str_nom_fonction;
5634  fonction = geo->get_mg_geom_fonctionid((int)val_CM);
5635  fprintf(in,"\%s = DEFI_FONCTION(NOM_PARA = 'EPSI',\n\
5636  NOM_RESU = 'SIGM',\n\
5637  INTERPOL = 'LIN',\n\
5638  PROL_DROITE = 'LINEAIRE',\n\
5639  PROL_GAUCHE = 'CONSTANT',\n\
5640  VALE = (",str_nom_fonction.c_str());
5641  double coo[2];
5642  fonction->get_point(0,coo);
5643  fprintf(in,"%lf,%lf,\n",coo[0],coo[1]);
5644  for(long k=1;k<fonction->get_nb_point()-2;k++)
5645  {
5646  fonction->get_point(k,coo);
5647  fprintf(in," %lf,%lf,\n",coo[0],coo[1]);
5648  }
5649  fonction->get_point(fonction->get_nb_point()-1,coo);
5650  fprintf(in," %lf,%lf,),);\n\n",coo[0],coo[1]);
5651  }
5652  }
5653 
5654 }
5656 {
5657 MG_GEOM_FONCTION *fonc_cond;
5658 int corr=100;
5659  for(long i=0;i<geo->get_nb_mg_volume();i++)
5660  {
5661  double val_Cond=0;
5662  geo->get_mg_volume(i)->get_valeur_ccf((char*)"Kx",val_Cond);
5663  if(val_Cond>0)
5664  {
5665  char chr_nom_fonction[8];
5666  sprintf(chr_nom_fonction,"%d",(int)val_Cond);
5667  std::string str_nom_fonction = chr_nom_fonction;
5668  fonc_cond = geo->get_mg_geom_fonctionid((int)val_Cond);
5669  fprintf(in,"F%s = DEFI_FONCTION(NOM_PARA = 'TEMP',\n\
5670  NOM_RESU = 'LAMBDA',\n\
5671  INTERPOL = 'LIN',\n\
5672  PROL_DROITE = 'LINEAIRE',\n\
5673  PROL_GAUCHE = 'CONSTANT',\n\
5674  VALE = (",str_nom_fonction.c_str());
5675  double col[2];
5676 
5677  fonc_cond->get_point(0,col);
5678  fprintf(in,"%le,%le,\n",col[0],corr*col[1]);
5679  for(long k=1;k<fonc_cond->get_nb_point()-2;k++)
5680  {
5681  fonc_cond->get_point(k,col);
5682  fprintf(in," %le,%le,\n",col[0],corr*col[1]);
5683  }
5684  fonc_cond->get_point(fonc_cond->get_nb_point()-1,col);
5685  fprintf(in," %le,%le,),);\n\n",col[0],corr*col[1]);
5686 
5687  }
5688  }
5689 
5690 
5691 }
5692 
5693 std::string MG_EXPORT::get_string_condition_limite(std::string ccf, double val)
5694 {
5695  char valchar[100];
5696  sprintf(valchar,"%le",val);
5697  std::string valstr=valchar;
5698  std::string chaine=ccf + " = " + valstr + ",";
5699  return chaine;
5700 }
5701 
5702 std::string MG_EXPORT::get_string_condition_limite_f(std::string ccf, std::string nom_fonction)
5703 {
5704  std::string chaine = ccf + " = " + nom_fonction + ",";
5705  return chaine;
5706 }
5707 
5708 std::string MG_EXPORT::get_string_nom_fonction(std::string prefixe, long int id,int base)
5709 {
5710  char idchar[7];
5711  if(base==10)
5712  {
5713  sprintf(idchar,"%ld",id);
5714  std::string chaine = prefixe+idchar;
5715  return chaine;
5716  }
5717  else
5718  {
5719  OT_CHAINE ot;
5720  std::string idbase=ot.get_base(id,base);
5721  std::string chaine = prefixe+idbase;
5722  return chaine;
5723  }
5724 }
5725 
5726 std::string MG_EXPORT::get_string_fonction(double inst_ini, double val_ini, double inst_fin, double val_fin,std::string nom_fonction)
5727 {
5728  std::string chaine;
5729  char char_inst_ini[100], char_inst_fin[100],char_val_ini[100],char_val_fin[100];
5730  std::string str_inst_ini, str_inst_fin, str_val_ini, str_val_fin;
5731  sprintf(char_inst_ini,"%le",inst_ini); str_inst_ini = char_inst_ini;
5732  sprintf(char_inst_fin,"%le",inst_fin); str_inst_fin = char_inst_fin;
5733  sprintf(char_val_ini,"%le",val_ini); str_val_ini = char_val_ini;
5734  sprintf(char_val_fin,"%le",val_fin); str_val_fin = char_val_fin;
5735  chaine = nom_fonction + "=" +
5736  " DEFI_FONCTION(NOM_PARA='INST', \n " +
5737  "VALE = ("+ str_inst_ini + "," + str_val_ini+ "," + str_inst_fin + "," + str_val_fin + ",),\n " +
5738  "PROL_GAUCHE = 'CONSTANT', \n PROL_DROITE = 'CONSTANT',);\n";
5739  return chaine;
5740 }
5741 
5742 std::string MG_EXPORT::get_string_formule(MG_ELEMENT_TOPOLOGIQUE* ele,int num,std::string nom_fonction)
5743 {
5744  std::string chaine;
5745  chaine = nom_fonction + "=" + "FORMULE(NOM_PARA = (";
5746  for(int i=0;i<ele->get_formule_nb_variable(num);i++)
5747  {
5748  chaine += "'"+ele->get_formule_variable(num,i)+"',";
5749  }
5750  chaine += "), VALE = '" + ele->get_formule_ccf(num) + "');\n";
5751  return chaine;
5752 }
5753 
5754 std::string MG_EXPORT::get_string_formule_stat_non_line(double inst_ini, double val_ini, double inst_fin, double val_fin, std::string nom_fonction)
5755 {
5756  std::string chaine;
5757  char char_inst_ini[100], char_inst_fin[100],char_val_ini[100],char_val_fin[100];
5758  std::string str_inst_ini, str_inst_fin, str_val_ini, str_val_fin;
5759  sprintf(char_inst_ini,"%le",inst_ini); str_inst_ini = char_inst_ini;
5760  sprintf(char_inst_fin,"%le",inst_fin); str_inst_fin = char_inst_fin;
5761  sprintf(char_val_ini,"%le",val_ini); str_val_ini = char_val_ini;
5762  sprintf(char_val_fin,"%le",val_fin); str_val_fin = char_val_fin;
5763  //chaine = nom_fonction + "=" + " FORMULE(NOM_PARA='INST',VALE = 'INST*(("+str_val_fin +"-"+str_val_ini+")/("+str_inst_fin+"-"+str_inst_ini+"))');\n";
5764  chaine = nom_fonction + " = DEFI_FONCTION(NOM_PARA = 'INST',INTERPOL = 'LIN',PROL_DROITE = 'LINEAIRE',PROL_GAUCHE = 'LINEAIRE',\n VALE = (" + str_inst_ini + "," + str_val_ini + "," + str_inst_fin + "," + str_val_fin;
5765  int decharge=(int)param_aster.get_valeur("Pas_decharge");
5766  if (decharge!=0)
5767  {
5768  int palier=(int)param_aster.get_valeur("Pas_palier");
5769  int PAS;
5770  double DEBUT,JUSQU_A;
5771  DEBUT=param_aster.get_valeur("Ti");
5772  PAS=(int)param_aster.get_valeur("Pas");
5773  JUSQU_A=param_aster.get_valeur("Tf");
5774  char char_inst_plus[100], char_val_plus[100];
5775  std::string str_inst_plus, str_val_plus;
5776  if (palier!=0)
5777  {
5778  sprintf(char_inst_plus,"%le",inst_fin+palier*1.0/PAS*(JUSQU_A-DEBUT)); str_inst_plus = char_inst_plus;
5779  str_val_plus = str_val_fin;
5780  chaine=chaine+","+str_inst_plus+","+str_val_plus;
5781  }
5782  sprintf(char_inst_plus,"%le",inst_fin+(palier+decharge)*1.0/PAS*(JUSQU_A-DEBUT)); str_inst_plus = char_inst_plus;
5783  sprintf(char_val_plus,"0"); str_val_plus = char_val_plus;
5784  chaine=chaine+","+str_inst_plus+","+str_val_plus;
5785  }
5786  chaine=chaine+"),);\n";
5787  return chaine;
5788 }
5789 
5790 std::string MG_EXPORT::get_string_formule_stat_non_line_instant(MG_ELEMENT_TOPOLOGIQUE* ele, int num, double inst_ini, double inst_fin, std::string nom_fonction)
5791 {
5792  std::string chaine;
5793  char char_inst_ini[100], char_inst_fin[100],char_val_ini[100],char_val_fin[100];
5794  std::string str_inst_ini, str_inst_fin, str_val_ini, str_val_fin;
5795  sprintf(char_inst_ini,"%le",inst_ini); str_inst_ini = char_inst_ini;
5796  sprintf(char_inst_fin,"%le",inst_fin); str_inst_fin = char_inst_fin;
5797  chaine = nom_fonction + "=" + "FORMULE(NOM_PARA = (";
5798  for(int i=0;i<ele->get_formule_nb_variable(num);i++)
5799  {
5800  chaine += "'"+ele->get_formule_variable(num,i)+"',";
5801  }
5802  chaine +="'INST'";
5803  chaine += "), VALE = 'INST*(("+ele->get_formule_ccf(num)+")/("+str_inst_fin+"-"+str_inst_ini+"))');\n";
5804  return chaine;
5805 }
5806 
5807 void MG_EXPORT::aster_ecrire_comm_condition_limite_blocage_force_temperature(MG_ELEMENT_TOPOLOGIQUE* ele, char* type_ccf, char* aster_ccf, double precision, bool stat_non_line, std::string& strlistccf, std::string& strlistccf_f, std::string& strfonction)
5808 {
5809  int base=(int)param_aster.get_valeur("Base_num_mail");
5810  char formulation;
5811  int num_ccf;
5812  ele->get_formulation_ccf(type_ccf,formulation);
5813  num_ccf = ele->get_num_ccf(type_ccf);
5814  if(formulation=='N')
5815  {
5816  double valeur_ccf;
5817  ele->get_valeur_ccf(type_ccf,valeur_ccf);
5818  if(!stat_non_line)
5819  {
5820  strlistccf = strlistccf + get_string_condition_limite(aster_ccf,valeur_ccf);
5821  }
5822  else
5823  {
5824  if(fabs(valeur_ccf)<precision)
5825  {
5826  strlistccf = strlistccf + get_string_condition_limite(aster_ccf,valeur_ccf);
5827  }
5828  else
5829  {
5830  std::string nom_fonction = get_string_nom_fonction(type_ccf,ele->get_id(),base);
5831  strlistccf_f = strlistccf_f + get_string_condition_limite_f(aster_ccf,nom_fonction);
5832  strfonction = strfonction + get_string_formule_stat_non_line(param_aster.get_valeur("Ti"),0.0,param_aster.get_valeur("Tf"),valeur_ccf,nom_fonction);
5833  }
5834  }
5835  }
5836  else if(formulation=='F')
5837  {
5838  if(!stat_non_line)
5839  {
5840  std::string nom_fonction = get_string_nom_fonction(type_ccf,ele->get_id(),base);
5841  strlistccf_f = strlistccf_f + get_string_condition_limite_f(aster_ccf,nom_fonction);
5842  strfonction = strfonction + get_string_formule(ele,num_ccf,nom_fonction);
5843  }
5844  else
5845  {
5846  std::string nom_fonction = get_string_nom_fonction(type_ccf,ele->get_id(),base);
5847  strlistccf_f = strlistccf_f + get_string_condition_limite_f(aster_ccf,nom_fonction);
5848  strfonction = strfonction + get_string_formule_stat_non_line_instant(ele,num_ccf,param_aster.get_valeur("Ti"),param_aster.get_valeur("Tf"),nom_fonction);
5849  }
5850  }
5851  else if(formulation=='I')
5852  {
5853 
5854  }
5855 }
5856 
5857 
5858 
5860 {
5861 std::string solveur="SOLVEUR=_F(";
5862 int val=(int)param_aster.get_valeur("Solveur_Methode");
5863 if (val==1)
5864  {
5865  solveur=solveur+"METHODE='MULT_FRONT',";
5866  int renum=(int)param_aster.get_valeur("Solveur_Renum_MULT_FRONT");
5867  if (renum==1) solveur=solveur+"RENUM='METIS',";
5868  if (renum==2) solveur=solveur+"RENUM='MD',";
5869  if (renum==3) solveur=solveur+"RENUM='MDA',";
5870  }
5871 if (val==2)
5872  {
5873  solveur=solveur+"METHODE='LDLT',";
5874  int renum=(int)param_aster.get_valeur("Solveur_Renum_LDLT");
5875  if (renum==1) solveur=solveur+"RENUM='RCMK',";
5876  if (renum==2) solveur=solveur+"RENUM='SANS',";
5877  }
5878 if (val==3)
5879  {
5880  solveur=solveur+"METHODE='MUMPS',";
5881  int renum=(int)param_aster.get_valeur("Solveur_Renum_MUMPS");
5882  if (renum==1) solveur=solveur+"RENUM='AUTO',";
5883  if (renum==2) solveur=solveur+"RENUM='AMD',";
5884  if (renum==3) solveur=solveur+"RENUM='AMF',";
5885  if (renum==4) solveur=solveur+"RENUM='QAMD',";
5886  if (renum==5) solveur=solveur+"RENUM='PORD',";
5887  if (renum==6) solveur=solveur+"RENUM='METIS',";
5888  if (renum==7) solveur=solveur+"RENUM='SCOTCH',";
5889  int gestmem=(int)param_aster.get_valeur("Solveur_Gestion_memoire_MUMPS");
5890  if (gestmem==1) solveur=solveur+"GESTION_MEMOIRE='AUTO',";
5891  if (gestmem==2) solveur=solveur+"GESTION_MEMOIRE='IN_CORE',";
5892  if (gestmem==3) solveur=solveur+"GESTION_MEMOIRE='OUT_OF_CORE',";
5893  if (gestmem==4) solveur=solveur+"GESTION_MEMOIRE='EVAL',";
5894  }
5895 if (val==4)
5896  {
5897  solveur=solveur+"METHODE='GCPC',";
5898  int pre=(int)param_aster.get_valeur("Solveur_Pre_Cond_GCPC");
5899  if (pre==1) solveur=solveur+"PRE_COND='LDLT_INC',RENUM='SANS',";
5900  if (pre==2) solveur=solveur+"PRE_COND='LDLT_INC',RENUM='RCMK',";
5901  if (pre==3) solveur=solveur+"PRE_COND='LDLT_SP',";
5902  }
5903 solveur=solveur+")";
5904 return solveur;
5905 }
5906 
5907 
5908 
5909 
5910 
5911 
5912 
5913 
5914 
5915 
5916 
5917 
5918 
5919 
5920 
5921 
5922 
5923 
5924 
5925 
5926 
5927 
5929 {
5930  LISTE_MG_TETRA::iterator it4;
5931  for (MG_TETRA* tet=mai->get_premier_tetra(it4);tet;tet=mai->get_suivant_tetra(it4))
5932  lsttetra.ajouter(tet);
5933  int nbtet=lsttetra.get_nb();
5934  LISTE_MG_HEXA::iterator it42;
5935  for (MG_HEXA* hex=mai->get_premier_hexa(it42);hex;hex=mai->get_suivant_hexa(it42))
5936  lsthexa.ajouter(hex);
5937  int nbhexa=lsthexa.get_nb();
5938  LISTE_MG_PENTA::iterator it43;
5939  for (MG_PENTA* pen=mai->get_premier_penta(it43);pen;pen=mai->get_suivant_penta(it43))
5940  lstpenta.ajouter(pen);
5941  int nbpenta=lstpenta.get_nb();
5942  LISTE_MG_PYRAMIDE::iterator it44;
5943  for (MG_PYRAMIDE* pyr=mai->get_premier_pyramide(it44);pyr;pyr=mai->get_suivant_pyramide(it44))
5944  lstpyramide.ajouter(pyr);
5945  int nbpyramide=lstpyramide.get_nb();
5946  LISTE_MG_TRIANGLE::iterator it3;
5947  for (MG_TRIANGLE* tri=mai->get_premier_triangle(it3);tri;tri=mai->get_suivant_triangle(it3))
5948  {
5949  if (tri->get_lien_topologie()!=NULL)
5950  {
5951  if (tri->get_lien_topologie()->get_dimension()==2) lsttriangle.ajouter(tri);
5952  }
5953  else if ((nbtet+nbhexa+nbpenta+nbpyramide==0)|| (MG_MAILLAGE::DIMENSIONMAILLAGESANSTOPO==2)) lsttriangle.ajouter(tri);
5954  }
5955  int nbtri=lsttriangle.get_nb();
5956  LISTE_MG_QUADRANGLE::iterator it32;
5957  for (MG_QUADRANGLE* quad=mai->get_premier_quadrangle(it32);quad;quad=mai->get_suivant_quadrangle(it32))
5958  {
5959  if (quad->get_lien_topologie()!=NULL)
5960  {
5961  if (quad->get_lien_topologie()->get_dimension()==2) lstquadrangle.ajouter(quad);
5962  }
5963  else if ((nbtet+nbhexa+nbpenta+nbpyramide==0)|| (MG_MAILLAGE::DIMENSIONMAILLAGESANSTOPO==2)) lstquadrangle.ajouter(quad);
5964  }
5965  int nbquad=lstquadrangle.get_nb();
5966  LISTE_MG_SEGMENT::iterator it2;
5967  for (MG_SEGMENT* seg=mai->get_premier_segment(it2);seg;seg=mai->get_suivant_segment(it2))
5968  {
5969  if (seg->get_lien_topologie()!=NULL)
5970  {
5971  if (seg->get_lien_topologie()->get_dimension()==1) lstsegment.ajouter(seg);
5972  }
5973  else
5974  if (((nbtet+nbhexa+nbpenta+nbpyramide==0) && (nbtri+nbquad==0)) || (MG_MAILLAGE::DIMENSIONMAILLAGESANSTOPO==1))
5975  lstsegment.ajouter(seg);
5976  }
5977 
5978  LISTE_MG_NOEUD::iterator it;
5979  for (MG_NOEUD* noeud=mai->get_premier_noeud(it);noeud;noeud=mai->get_suivant_noeud(it))
5980  {
5981  if (noeud->get_lien_topologie()!=NULL)
5982  if (noeud->get_lien_topologie()->get_dimension()==0) lstnoeud.ajouter(noeud);
5983  }
5984 
5985 }
5986 
5987 
5988 
5990 {
5991 char version[100];
5992 strcpy(version,param_aster.get_nom("Version").c_str());
5993 for (int i=0;i<strlen(version);i++)
5994  if ((version[i]!='0') && (version[i]!='1') && (version[i]!='2') && (version[i]!='3') && (version[i]!='4') && (version[i]!='5') && (version[i]!='6') && (version[i]!='7') && (version[i]!='8') && (version[i]!='9') && (version[i]!='.'))
5995  version[i]=' ';
5996 double ver;
5997 sscanf(version,"%lf",&ver);
5998 return ver;
5999 }
6000 
6001 void MG_EXPORT::stl(class MG_MAILLAGE* mai,std::string fichier)
6002 {
6003 std::string fichiermaillage=fichier+".stl";
6004 FILE* in=fopen(fichiermaillage.c_str(),"wt");
6005 fprintf(in,"solid MAGiC\n");
6006 LISTE_MG_TRIANGLE::iterator it;
6007 for (MG_TRIANGLE* tri=mai->get_premier_triangle(it);tri!=NULL;tri=mai->get_suivant_triangle(it))
6008  {
6009  double *xyz1=tri->get_noeud1()->get_coord();
6010  double *xyz2=tri->get_noeud2()->get_coord();
6011  double *xyz3=tri->get_noeud3()->get_coord();
6012  OT_VECTEUR_3D vec1(xyz1,xyz2);
6013  OT_VECTEUR_3D vec2(xyz1,xyz3);
6014  OT_VECTEUR_3D nor=vec1&vec2;
6015  nor.norme();
6016  fprintf(in," facet normal %le %le %le\n",nor.get_x(),nor.get_y(),nor.get_z());
6017  fprintf(in," outer loop\n");
6018  fprintf(in," vertex %le %le %le\n",xyz1[0],xyz1[1],xyz1[2]);
6019  fprintf(in," vertex %le %le %le\n",xyz2[0],xyz2[1],xyz2[2]);
6020  fprintf(in," vertex %le %le %le\n",xyz3[0],xyz3[1],xyz3[2]);
6021  fprintf(in," endloop\n");
6022  fprintf(in," endfacet\n");
6023  }
6024 fprintf(in,"endsolid MAGiC\n");
6025 }
6026 
6027 
6028 void MG_EXPORT::off(class MG_MAILLAGE* mai,std::string fichier)
6029 {
6030 std::string fichiermaillage=fichier+".off";
6031 FILE* in=fopen(fichiermaillage.c_str(),"wt");
6032 fprintf(in,"OFF\n");
6033 fprintf(in,"%d %d 0\n",mai->get_nb_mg_noeud(),mai->get_nb_mg_triangle()+mai->get_nb_mg_quadrangle());
6034 int i=0;
6035 LISTE_MG_NOEUD::iterator it;
6036 for (MG_NOEUD* noeud=mai->get_premier_noeud(it);noeud;noeud=mai->get_suivant_noeud(it))
6037  {
6038  noeud->change_nouveau_numero(i);
6039  double *coord=noeud->get_coord();
6040  fprintf(in,"%lf %lf %lf\n",coord[0],coord[1],coord[2]);
6041  i++;
6042  }
6043 LISTE_MG_TRIANGLE::iterator itt;
6044 for (MG_TRIANGLE* tri=mai->get_premier_triangle(itt);tri;tri=mai->get_suivant_triangle(itt))
6045  {
6046  fprintf(in,"3 %d %d %d\n",tri->get_noeud2()->get_nouveau_numero(),tri->get_noeud1()->get_nouveau_numero(),tri->get_noeud3()->get_nouveau_numero());
6047  }
6048 LISTE_MG_QUADRANGLE::iterator itq;
6049 for (MG_QUADRANGLE* qua=mai->get_premier_quadrangle(itq);qua;qua=mai->get_suivant_quadrangle(itq))
6050  {
6051  fprintf(in,"4 %d %d %d %d\n",qua->get_noeud1()->get_nouveau_numero(),qua->get_noeud2()->get_nouveau_numero(),qua->get_noeud3()->get_nouveau_numero(),qua->get_noeud4()->get_nouveau_numero());
6052  }
6053 
6054 
6055 }
6056 
6057 
6058 
6060 {
6061  double x=param.get(6), y=param.get(7), z=param.get(8);
6062  double alpha=0., beta=0., gamma=0.;
6063 
6064  if((fabs(x)>precision)||(fabs(y)>precision))
6065  {
6066  alpha=atan2(y,x);
6067  if(fabs(cos(alpha))>=fabs(sin(alpha))) beta = acos(x/cos(alpha));
6068  else beta = acos(y/sin(alpha));
6069  if (z>0.) beta=-beta;
6070  }
6071  else
6072  {
6073  alpha=0.;
6074  if(z>0.) beta=-M_PI/2.;
6075  else beta=M_PI/2;
6076  }
6077 
6078  char valchar[100];
6079  sprintf(valchar,"ANGL_NAUT = (%le,%le,%le)",alpha*180/M_PI,beta*180/M_PI,gamma);
6080  std::string valstr=valchar;
6081  return valstr;
6082 }
6083 
6084 
6085 
6086 void MG_EXPORT::regroupement_faces(MG_FACE* face,double val,TPL_LISTE_ENTITE<double> param,std::string &strlistccf,MG_GEOMETRIE* geo)
6087 {
6088  int id_face=face->get_id();
6089  int nb_face = geo->get_nb_mg_face();
6090  double precision=geo->get_valeur_precision();
6091  for (int i=0;i<nb_face;i++)
6092  {
6093  MG_FACE* face_i=geo->get_mg_face(i);
6094  int id_face_i=face_i->get_id();
6095  double val_i;
6096  TPL_LISTE_ENTITE<double> param_i;
6097  if(face_i->get_valeur_ccf((char*)"DR",val_i)&&(val_i==val)&&(face_i->get_surface()->get_type_geometrique(param_i)==GEOMETRIE::CONST::Co_CYLINDRE)&&(id_face_i!=id_face))
6098  {
6099  double cen1[3]={param.get(0),param.get(1),param.get(2)};
6100  double cen2[3]={param_i.get(0),param_i.get(1),param_i.get(2)};
6101 
6102  OT_VECTEUR_3D vec1(cen1,cen2);
6103  OT_VECTEUR_3D vec2(param.get(6),param.get(7),param.get(8));
6104  OT_VECTEUR_3D vec3=vec1&vec2;
6105  if((vec3.get_longueur()<precision)&&(fabs(param.get(9)-param_i.get(9))<precision)) strlistccf = strlistccf + "'GMF" + std::to_string(id_face_i) + "',";
6106  }
6107  if(face_i->get_valeur_ccf((char*)"DR",val_i)&&(val_i==val)&&(face_i->get_surface()->get_type_geometrique(param_i)==GEOMETRIE::CONST::Co_SPHERE)&&(id_face_i!=id_face))
6108  {
6109  if((fabs((param.get(0)-param_i.get(0)))<precision)&&(fabs((param.get(1)-param_i.get(1)))<precision)&&(fabs((param.get(2)-param_i.get(2)))<precision)&&(fabs((param.get(3)-param_i.get(3)))<precision))
6110  strlistccf = strlistccf + "'GMF" + std::to_string(id_face_i) + "',";
6111  }
6112  }
6113 }
6114 
6115 
6116 
6117 void MG_EXPORT::abaqus(FEM_MAILLAGE* mai, std::string fichier)
6118 {
6119 double facteur_unite = 1.;
6120 if (mai->get_mg_geometrie()!=NULL) facteur_unite=mai->get_mg_geometrie()->get_valeur_unite();
6121 std::string fichiermaillage=fichier+".inp";
6122 FILE* out=fopen(fichiermaillage.c_str(),"wt");
6123 char chaine[5000];
6124 fprintf(out,"** Exportation MAGIC->ABAQUS\n");
6125 fprintf(out,"**=**DEFINITION DES NOEUDS DU MAILLAGE\n");
6126 fprintf(out,"*NODE,SYSTEM=R\n");
6127 LISTE_FEM_NOEUD::iterator it;
6128 int i=0;
6129 for (FEM_NOEUD* noeud=mai->get_premier_noeud(it);noeud;noeud=mai->get_suivant_noeud(it))
6130  {
6131  i++;
6132  noeud->change_numero(i);
6133  double *coord=noeud->get_coord();
6134  fprintf(out, "%d,%+0.15E,%+0.15E,%+0.15E\n",noeud->get_numero(),coord[0]*facteur_unite,coord[1]*facteur_unite,coord[2]*facteur_unite);
6135 
6136 
6137  }
6138 fprintf(out, "**==** DEFINITION DES ELEMENTS\n");
6145 LISTE_FEM_ELEMENT3::iterator itele;
6146 for (FEM_ELEMENT3* ele=mai->get_premier_element3(itele);ele!=NULL;ele=mai->get_suivant_element3(itele))
6147  {
6148  if (ele->get_nb_fem_noeud()==4) lstc3d4.ajouter(ele);
6149  if (ele->get_nb_fem_noeud()==6) lstc3d6.ajouter(ele);
6150  if (ele->get_nb_fem_noeud()==8) lstc3d8.ajouter(ele);
6151  if (ele->get_nb_fem_noeud()==10) lstc3d10.ajouter(ele);
6152  if (ele->get_nb_fem_noeud()==15) lstc3d15.ajouter(ele);
6153  if (ele->get_nb_fem_noeud()==20) lstc3d20.ajouter(ele);
6154  }
6155 int nbele=0;
6156 if (lstc3d4.get_nb()!=0)
6157  {
6158  fprintf(out,"*ELEMENT,TYPE=C3D4,ELSET=EF_C3D4\n");
6159  for (int i=0;i<lstc3d4.get_nb();i++)
6160  {
6161  nbele++;
6162  FEM_ELEMENT3* ele=lstc3d4.get(i);
6163  ele->change_numero(nbele);
6164  fprintf(out,"%d,%d,%d,%d,%d,\n",nbele,ele->get_fem_noeud(0)->get_numero(),ele->get_fem_noeud(1)->get_numero(),ele->get_fem_noeud(2)->get_numero(),ele->get_fem_noeud(3)->get_numero());
6165  }
6166  }
6167 if (lstc3d6.get_nb()!=0)
6168  {
6169  fprintf(out,"*ELEMENT,TYPE=C3D4,ELSET=EF_C3D6\n");
6170  for (int i=0;i<lstc3d6.get_nb();i++)
6171  {
6172  nbele++;
6173  FEM_ELEMENT3* ele=lstc3d6.get(i);
6174  ele->change_numero(nbele);
6175  fprintf(out,"%d,%d,%d,%d,%d,%d,%d,\n",nbele,ele->get_fem_noeud(0)->get_numero(),ele->get_fem_noeud(1)->get_numero(),ele->get_fem_noeud(2)->get_numero(),ele->get_fem_noeud(3)->get_numero(),ele->get_fem_noeud(4)->get_numero(),ele->get_fem_noeud(5)->get_numero());
6176  }
6177  }
6178 if (lstc3d8.get_nb()!=0)
6179  {
6180  fprintf(out,"*ELEMENT,TYPE=C3D8,ELSET=EF_C3D8\n");
6181  for (int i=0;i<lstc3d8.get_nb();i++)
6182  {
6183  nbele++;
6184  FEM_ELEMENT3* ele=lstc3d8.get(i);
6185  ele->change_numero(nbele);
6186  fprintf(out,"%d,%d,%d,%d,%d,%d,%d,%d,%d,\n",nbele,ele->get_fem_noeud(0)->get_numero(),ele->get_fem_noeud(1)->get_numero(),ele->get_fem_noeud(2)->get_numero(),ele->get_fem_noeud(3)->get_numero(),ele->get_fem_noeud(4)->get_numero(),ele->get_fem_noeud(5)->get_numero(),ele->get_fem_noeud(6)->get_numero(),ele->get_fem_noeud(7)->get_numero());
6187  }
6188  }
6189 if (lstc3d10.get_nb()!=0)
6190  {
6191  fprintf(out,"*ELEMENT,TYPE=C3D10,ELSET=EF_C3D10\n");
6192  for (int i=0;i<lstc3d10.get_nb();i++)
6193  {
6194  nbele++;
6195  FEM_ELEMENT3* ele=lstc3d10.get(i);
6196  ele->change_numero(nbele);
6197  fprintf(out,"%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,\n",nbele,ele->get_fem_noeud(0)->get_numero(),ele->get_fem_noeud(2)->get_numero(),ele->get_fem_noeud(4)->get_numero(),ele->get_fem_noeud(9)->get_numero(),ele->get_fem_noeud(1)->get_numero(),ele->get_fem_noeud(3)->get_numero(),ele->get_fem_noeud(5)->get_numero(),ele->get_fem_noeud(6)->get_numero(),ele->get_fem_noeud(7)->get_numero(),ele->get_fem_noeud(8)->get_numero());
6198  }
6199  }
6200 if (lstc3d15.get_nb()!=0)
6201  {
6202  fprintf(out,"*ELEMENT,TYPE=C3D15,ELSET=EF_C3D15\n");
6203  for (int i=0;i<lstc3d15.get_nb();i++)
6204  {
6205  nbele++;
6206  FEM_ELEMENT3* ele=lstc3d15.get(i);
6207  ele->change_numero(nbele);
6208  fprintf(out,"%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,\n",nbele,ele->get_fem_noeud(0)->get_numero(),ele->get_fem_noeud(2)->get_numero(),ele->get_fem_noeud(4)->get_numero(),ele->get_fem_noeud(9)->get_numero(),ele->get_fem_noeud(11)->get_numero(),ele->get_fem_noeud(13)->get_numero(),ele->get_fem_noeud(1)->get_numero(),ele->get_fem_noeud(3)->get_numero(),ele->get_fem_noeud(5)->get_numero(),ele->get_fem_noeud(6)->get_numero(),ele->get_fem_noeud(7)->get_numero(),ele->get_fem_noeud(8)->get_numero(),ele->get_fem_noeud(10)->get_numero(),ele->get_fem_noeud(12)->get_numero(),ele->get_fem_noeud(14)->get_numero());
6209 
6210  }
6211  }
6212 if (lstc3d20.get_nb()!=0)
6213  {
6214  fprintf(out,"*ELEMENT,TYPE=C3D20,ELSET=EF_C3D20\n");
6215  for (int i=0;i<lstc3d20.get_nb();i++)
6216  {
6217  nbele++;
6218  FEM_ELEMENT3* ele=lstc3d20.get(i);
6219  ele->change_numero(nbele);
6220  fprintf(out,"%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,\n%d,%d,%d,%d,%d,\n",nbele,ele->get_fem_noeud(0)->get_numero(),ele->get_fem_noeud(2)->get_numero(),ele->get_fem_noeud(4)->get_numero(),ele->get_fem_noeud(6)->get_numero(),ele->get_fem_noeud(12)->get_numero(),ele->get_fem_noeud(14)->get_numero(),ele->get_fem_noeud(16)->get_numero(),ele->get_fem_noeud(18)->get_numero(),ele->get_fem_noeud(1)->get_numero(),ele->get_fem_noeud(3)->get_numero(),ele->get_fem_noeud(5)->get_numero(),ele->get_fem_noeud(7)->get_numero(),ele->get_fem_noeud(8)->get_numero(),ele->get_fem_noeud(9)->get_numero(),ele->get_fem_noeud(10)->get_numero(),ele->get_fem_noeud(11)->get_numero(),ele->get_fem_noeud(13)->get_numero(),ele->get_fem_noeud(15)->get_numero(),ele->get_fem_noeud(17)->get_numero(),ele->get_fem_noeud(19)->get_numero());
6221 
6222  }
6223  }
6224 if (mai->get_mg_geometrie()!=NULL)
6225  {
6226  MG_GEOMETRIE* geo=mai->get_mg_geometrie();
6227  fprintf(out,"**_** DEFINITION DES GROUPES D ELEMENTS\n");
6228  int numvol=0;
6229  LISTE_MG_VOLUME::iterator it;
6230  for (MG_VOLUME* vol=geo->get_premier_volume(it);vol!=NULL;vol=geo->get_suivant_volume(it))
6231  {
6232  numvol++;
6233  fprintf(out,"*ELSET,ELSET=Elt_%04d\n",numvol);
6234  for (int j=0;j<vol->get_lien_fem_maillage()->get_nb();j++)
6235  {
6236  fprintf(out,"%d,",vol->get_lien_fem_maillage()->get(j)->get_numero());
6237  if ( ((j+1)%16==0) && (j<vol->get_lien_fem_maillage()->get_nb()-1) )fprintf(out,"\n");
6238  }
6239  fprintf(out,"\n");
6240  }
6241  }
6242 fclose(out);
6243 
6244 }
6245 
6246 void MG_EXPORT::formatneutre(FEM_MAILLAGE* mai, std::string fichier)
6247 {
6248 double facteur_unite = 1.;
6249 if (mai->get_mg_geometrie()!=NULL) facteur_unite=mai->get_mg_geometrie()->get_valeur_unite();
6250 std::string fichiermaillage=fichier+".mai";
6251 FILE* out=fopen(fichiermaillage.c_str(),"wt");
6252 LISTE_FEM_NOEUD::iterator it;
6253 int i=0;
6254 fprintf(out, "%d %d %d\n",mai->get_nb_fem_noeud(),mai->get_nb_fem_element2(),mai->get_nb_fem_element3());
6255 for (FEM_NOEUD* noeud=mai->get_premier_noeud(it);noeud;noeud=mai->get_suivant_noeud(it))
6256  {
6257  i++;
6258  noeud->change_numero(i);
6259  double *coord=noeud->get_coord();
6260  fprintf(out, "%d %lf %lf %lf\n",noeud->get_numero(),coord[0]*facteur_unite,coord[1]*facteur_unite,coord[2]*facteur_unite);
6261  }
6262 LISTE_FEM_ELEMENT2::iterator itele;
6263 for (FEM_ELEMENT2* ele=mai->get_premier_element2(itele);ele!=NULL;ele=mai->get_suivant_element2(itele))
6264  {
6265  if (ele->get_nb_fem_noeud()==3)
6266  fprintf(out,"T3 %d %d %d\n",ele->get_fem_noeud(0)->get_numero(),ele->get_fem_noeud(1)->get_numero(),ele->get_fem_noeud(2)->get_numero());
6267  if (ele->get_nb_fem_noeud()==4)
6268  fprintf(out,"Q4 %d %d %d %d\n",ele->get_fem_noeud(0)->get_numero(),ele->get_fem_noeud(1)->get_numero(),ele->get_fem_noeud(2)->get_numero(),ele->get_fem_noeud(3)->get_numero());
6269  if (ele->get_nb_fem_noeud()==6)
6270  fprintf(out,"T6 %d %d %d %d %d %d\n",ele->get_fem_noeud(0)->get_numero(),ele->get_fem_noeud(2)->get_numero(),ele->get_fem_noeud(4)->get_numero(),ele->get_fem_noeud(1)->get_numero(),ele->get_fem_noeud(3)->get_numero(),ele->get_fem_noeud(5)->get_numero());
6271  if (ele->get_nb_fem_noeud()==8)
6272  fprintf(out,"Q8 %d %d %d %d %d %d %d %d\n",ele->get_fem_noeud(0)->get_numero(),ele->get_fem_noeud(2)->get_numero(),ele->get_fem_noeud(4)->get_numero(),ele->get_fem_noeud(6)->get_numero(),ele->get_fem_noeud(1)->get_numero(),ele->get_fem_noeud(3)->get_numero(),ele->get_fem_noeud(5)->get_numero(),ele->get_fem_noeud(7)->get_numero());
6273  }
6274 LISTE_FEM_ELEMENT3::iterator itele2;
6275 for (FEM_ELEMENT3* ele=mai->get_premier_element3(itele2);ele!=NULL;ele=mai->get_suivant_element3(itele2))
6276  {
6277  if (ele->get_nb_fem_noeud()==4)
6278  fprintf(out,"T4 %d %d %d %d\n",ele->get_fem_noeud(0)->get_numero(),ele->get_fem_noeud(1)->get_numero(),ele->get_fem_noeud(2)->get_numero(),ele->get_fem_noeud(3)->get_numero());
6279  if (ele->get_nb_fem_noeud()==8)
6280  fprintf(out,"H8 %d %d %d %d %d %d %d %d\n",ele->get_fem_noeud(0)->get_numero(),ele->get_fem_noeud(1)->get_numero(),ele->get_fem_noeud(2)->get_numero(),ele->get_fem_noeud(3)->get_numero(),ele->get_fem_noeud(4)->get_numero(),ele->get_fem_noeud(4)->get_numero(),ele->get_fem_noeud(6)->get_numero(),ele->get_fem_noeud(7)->get_numero());
6281  if (ele->get_nb_fem_noeud()==10)
6282  fprintf(out,"T10 %d %d %d %d %d %d %d %d %d %d\n",ele->get_fem_noeud(0)->get_numero(),ele->get_fem_noeud(2)->get_numero(),ele->get_fem_noeud(4)->get_numero(),ele->get_fem_noeud(1)->get_numero(),ele->get_fem_noeud(3)->get_numero(),ele->get_fem_noeud(5)->get_numero(),ele->get_fem_noeud(6)->get_numero(),ele->get_fem_noeud(7)->get_numero(),ele->get_fem_noeud(8)->get_numero(),ele->get_fem_noeud(9)->get_numero());
6283  if (ele->get_nb_fem_noeud()==20)
6284  fprintf(out,"H20 %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d\n",ele->get_fem_noeud(0)->get_numero(),ele->get_fem_noeud(2)->get_numero(),ele->get_fem_noeud(4)->get_numero(),ele->get_fem_noeud(6)->get_numero(),ele->get_fem_noeud(12)->get_numero(),ele->get_fem_noeud(14)->get_numero(),ele->get_fem_noeud(16)->get_numero(),ele->get_fem_noeud(18)->get_numero(),ele->get_fem_noeud(1)->get_numero(),ele->get_fem_noeud(7)->get_numero(),ele->get_fem_noeud(8)->get_numero(),ele->get_fem_noeud(3)->get_numero(),ele->get_fem_noeud(9)->get_numero(),ele->get_fem_noeud(5)->get_numero(),ele->get_fem_noeud(10)->get_numero(),ele->get_fem_noeud(11)->get_numero(),ele->get_fem_noeud(13)->get_numero(),ele->get_fem_noeud(19)->get_numero(),ele->get_fem_noeud(15)->get_numero(),ele->get_fem_noeud(17)->get_numero());
6285  }
6286 fclose(out);
6287 
6288 }
6289 
MG_SOLUTION::lire
double lire(int i, int j, int coord=0, int num_no=0)
Definition: mg_solution.cpp:296
MG_GEOM_FONCTION::get_point
virtual void get_point(int num, double *coo)
Definition: mg_geom_fonction.cpp:95
FEM_NOEUD::get_numero_opt
int get_numero_opt(void)
Definition: fem_noeud.cpp:338
FEM_MAILLAGE::get_suivant_element0
FEM_ELEMENT0 * get_suivant_element0(LISTE_FEM_ELEMENT0::iterator &it)
Definition: fem_maillage.cpp:346
MG_GEOMETRIE::get_valeur_precision
double get_valeur_precision(void)
Definition: mg_geometrie.cpp:2642
MAGIC::CALCUL_ASTER::ELASTIQUE_GROT_GDEF_3D
@ ELASTIQUE_GROT_GDEF_3D
Definition: mg_definition.h:157
MG_MAILLAGE::get_premier_penta
MG_PENTA * get_premier_penta(LISTE_MG_PENTA::iterator &it)
Definition: mg_maillage.cpp:1909
MG_GEOMETRIE::get_mg_geom_fonction
MG_GEOM_FONCTION * get_mg_geom_fonction(unsigned int num)
Definition: mg_geometrie.cpp:2169
FEM_ELEMENT0::get_fem_noeud
virtual class FEM_NOEUD * get_fem_noeud(int num)
Definition: fem_element0.cpp:100
mg_coque_element.h
FEM_SOLUTION::get_nb_champ
int get_nb_champ(void)
Definition: fem_solution.cpp:467
mg_poutre.h
MG_EXPORT::MG_EXPORT
MG_EXPORT()
Definition: mg_export.cpp:54
TPL_MAP_ENTITE::get_premier
virtual X get_premier(ITERATEUR &it)
Definition: tpl_map_entite.h:112
MG_EXPORT::aster_ecrire_comm_imprime_resultat_statique_coque
void aster_ecrire_comm_imprime_resultat_statique_coque(FILE *in, char *coderesu)
Definition: mg_export.cpp:5223
MG_EXPORT::aster_ecrire_comm_affe_materiau_iteratif
void aster_ecrire_comm_affe_materiau_iteratif(FILE *in, std::string maillage, int nbvol, int nbcoque, MG_GEOMETRIE *geo)
Definition: mg_export.cpp:3712
FEM_MAILLAGE::get_fem_element1id
FEM_ELEMENT1 * get_fem_element1id(unsigned long num)
Definition: fem_maillage.cpp:372
MG_HEXA::get_noeud4
virtual MG_NOEUD * get_noeud4(void)
Definition: mg_hexa.cpp:214
FEM_MAILLAGE::get_nb_xfem_element2
unsigned int get_nb_xfem_element2(void)
Definition: fem_maillage.cpp:938
FEM_SOLUTION
Definition: fem_solution.h:40
MG_SEGMENT
Definition: mg_segment.h:38
MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT2
@ ENTITE_ELEMENT2
Definition: mg_definition.h:86
MG_EXPORT::get_string_angles_nautiques
std::string get_string_angles_nautiques(TPL_LISTE_ENTITE< double > &param, double precision)
Definition: mg_export.cpp:6059
FEM_ELEMENT_MAILLAGE::change_numero
virtual void change_numero(int num)
Definition: fem_element_maillage.cpp:95
FEM_MAILLAGE::get_suivant_element3
FEM_ELEMENT3 * get_suivant_element3(LISTE_FEM_ELEMENT3::iterator &it)
Definition: fem_maillage.cpp:680
MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT1_NOEUD
@ ENTITE_ELEMENT1_NOEUD
Definition: mg_definition.h:86
XFEM_ELEMENT2
Definition: xfem_element2.h:34
MG_SOLUTION::get_legende
std::string get_legende(int num)
Definition: mg_solution.cpp:333
FCT_TAILLE_FEM_SOLUTION::get_maillage
virtual FEM_MAILLAGE * get_maillage(void)
Definition: fct_taille_fem_solution.cpp:380
MG_TETRA::get_noeud2
virtual MG_NOEUD * get_noeud2(void)
Definition: mg_tetra.cpp:148
MG_MAILLAGE::get_premier_noeud
MG_NOEUD * get_premier_noeud(LISTE_MG_NOEUD::iterator &it)
Definition: mg_maillage.cpp:548
FEM_SOLUTION::get_legende
std::string get_legende(int num)
Definition: fem_solution.cpp:462
MG_BOUCLE
Definition: mg_boucle.h:35
gestionversion.h
MG_FACE_ELEMENT::get_element
virtual MG_ELEMENT_MAILLAGE * get_element(int i)
Definition: mg_face_element.cpp:143
MG_BOUCLE::get_nb_mg_coarete
virtual int get_nb_mg_coarete(void)
Definition: mg_boucle.cpp:78
MG_EXPORT::abaqus
void abaqus(class FEM_MAILLAGE *mai, std::string fichier)
Definition: mg_export.cpp:6117
MG_EXPORT::aster_ecrire_mail
void aster_ecrire_mail(TPL_MAP_ENTITE< class FEM_ELEMENT1 * > &minipresent, int dim, TPL_LISTE_ENTITE< MG_COFACE * > *lstcoface, class FEM_MAILLAGE *mai, std::string fichier, int typeetude, int niveaumax, std::vector< FEM_ELEMENT3 * > *lst, std::map< std::string, std::string > &listegroupedemaillexy, std::map< unsigned long, unsigned long > &gnexistant)
Definition: mg_export.cpp:2094
MAGIC::TYPE_ENTITE::IDMG_SEGMENT
@ IDMG_SEGMENT
Definition: mg_definition.h:69
MG_PENTA::get_noeud6
virtual MG_NOEUD * get_noeud6(void)
Definition: mg_penta.cpp:195
MG_EXPORT::aster_ecrire_comm_condition_limite_force_normale_2d
void aster_ecrire_comm_condition_limite_force_normale_2d(FILE *in, MG_GEOMETRIE *geo, bool stat_non_line, std::vector< std::string > &chargepresente)
Definition: mg_export.cpp:4155
MG_EXPORT::get_string_fonction
std::string get_string_fonction(double inst_ini, double val_ini, double inst_fin, double val_fin, std::string nom_fonction)
Definition: mg_export.cpp:5726
fct_generateur_calibrage.h
MG_EXPORT::gmsh41partition
void gmsh41partition(std::ofstream &f, MG_MAILLAGE *mai, TPL_MAP_ENTITE< MG_NOEUD * > &lstnoeud, TPL_MAP_ENTITE< MG_SEGMENT * > &lstsegment, TPL_MAP_ENTITE< MG_TRIANGLE * > &lsttriangle, TPL_MAP_ENTITE< MG_QUADRANGLE * > &lstquadrangle, TPL_MAP_ENTITE< MG_TETRA * > &lsttetra, TPL_MAP_ENTITE< MG_HEXA * > &lsthexa, TPL_MAP_ENTITE< MG_PENTA * > &lstpenta, TPL_MAP_ENTITE< MG_PYRAMIDE * > &lstpyramide)
Definition: mg_export.cpp:172
MG_EXPORT::aster_ecrire_comm_debut
double aster_ecrire_comm_debut(std::string fichier, FILE **in)
Definition: mg_export.cpp:3188
TPL_MAP_ENTITE< MG_NOEUD * >
MG_PENTA
Definition: mg_penta.h:37
MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENTND
@ ENTITE_ELEMENTND
Definition: mg_definition.h:86
XFEM_ELEMENT3
Definition: xfem_element3.h:34
FCT_TAILLE_FEM_SOLUTION
Definition: fct_taille_fem_solution.h:37
OT_PARAMETRES::get_valeur
double get_valeur(std::string chaine, int num=0)
Definition: ot_parametres.cpp:191
MG_SURFACE::get_type_geometrique
virtual int get_type_geometrique(TPL_LISTE_ENTITE< double > &param)=0
MG_EXPORT::aster_ecrire_comm_rigidite
void aster_ecrire_comm_rigidite(FILE *in, bool coque)
Definition: mg_export.cpp:3259
BOITE_3D::get_xmin
double get_xmin(void)
Definition: ot_boite_3d.cpp:104
MG_GEOMETRIE::get_suivant_volume
MG_VOLUME * get_suivant_volume(LISTE_MG_VOLUME::iterator &it)
Definition: mg_geometrie.cpp:1702
MG_EXPORT::aster_ecrire_comm_fin
void aster_ecrire_comm_fin(FILE *in)
Definition: mg_export.cpp:3200
mg_gestionnaire.h
MAGIC::CALCUL_ASTER::DEFORMATION_PLANE
@ DEFORMATION_PLANE
Definition: mg_definition.h:139
MG_ELEMENT_TOPOLOGIQUE::get_formule_nb_variable
virtual int get_formule_nb_variable(int num)
Definition: mg_element_topologique.cpp:125
MG_SEGMENT::get_noeud2
virtual MG_NOEUD * get_noeud2(void)
Definition: mg_segment.cpp:113
MG_SOLUTION::get_nb_champ
int get_nb_champ(void)
Definition: mg_solution.cpp:338
FEM_ELEMENT3::get_fem_noeud
virtual class FEM_NOEUD * get_fem_noeud(int num)=0
MG_EXPORT::ecrire_params_aster
void ecrire_params_aster(char *fichier)
Definition: mg_export.cpp:115
MG_EXPORT::aster_ecrire_comm_fonction_courbe_traction
void aster_ecrire_comm_fonction_courbe_traction(FILE *in, MG_GEOMETRIE *geo)
Definition: mg_export.cpp:5616
MG_NOEUD::get_z
virtual double get_z(void)
Definition: mg_noeud.cpp:87
MG_EXPORT::get_param_aster
OT_PARAMETRES * get_param_aster(void)
Definition: mg_export.cpp:128
MG_IDENTIFICATEUR::get_id
unsigned long get_id()
Definition: mg_identificateur.cpp:53
MG_TETRA::get_noeud1
virtual MG_NOEUD * get_noeud1(void)
Definition: mg_tetra.cpp:143
MG_MAILLAGE::get_nb_mg_triangle
unsigned int get_nb_mg_triangle(void)
Definition: mg_maillage.cpp:814
MG_ELEMENT_TOPOLOGIQUE::est_orthotrope_mecanique
virtual bool est_orthotrope_mecanique(void)
Definition: mg_element_topologique.cpp:417
FCT_TAILLE_FEM_SOLUTION::get_solution
virtual FEM_SOLUTION * get_solution(void)
Definition: fct_taille_fem_solution.cpp:385
FEM_MAILLAGE::get_nb_fem_element0
unsigned int get_nb_fem_element0(void)
Definition: fem_maillage.cpp:271
MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT3_NOEUD
@ ENTITE_ELEMENT3_NOEUD
Definition: mg_definition.h:86
MAGIC::CALCUL_ASTER::THERMIQUE
@ THERMIQUE
Definition: mg_definition.h:137
MAGIC::CALCUL_ASTER::ELASTIQUE_NON_LINEAIRE_3D
@ ELASTIQUE_NON_LINEAIRE_3D
Definition: mg_definition.h:160
MG_POUTRE_ELEMENT
Definition: mg_poutre_element.h:31
MG_MAILLAGE::get_suivant_quadrangle
MG_QUADRANGLE * get_suivant_quadrangle(LISTE_MG_QUADRANGLE::iterator &it)
Definition: mg_maillage.cpp:1150
MG_GEOM_FONCTION::get_nb_point
virtual int get_nb_point(void)
Definition: mg_geom_fonction.cpp:115
MG_COQUE_ELEMENT
Definition: mg_coque_element.h:32
MG_EXPORT::aster_ecrire_comm_affe_materiau
void aster_ecrire_comm_affe_materiau(FILE *in, std::string maillage, int nbvol, int nbcoque, int nbpoutre, MG_GEOMETRIE *geo, std::string carac="P")
Definition: mg_export.cpp:3685
MG_GEOMETRIE::get_nb_mg_arete
unsigned int get_nb_mg_arete(void)
Definition: mg_geometrie.cpp:813
FEM_MAILLAGE::get_suivant_xelement3
XFEM_ELEMENT3 * get_suivant_xelement3(LISTE_XFEM_ELEMENT3::iterator &it)
Definition: fem_maillage.cpp:1125
MG_MAILLAGE::get_premier_tetra
MG_TETRA * get_premier_tetra(LISTE_MG_TETRA::iterator &it)
Definition: mg_maillage.cpp:1374
OT_CHAINE::get_base
std::string get_base(unsigned long val, int base)
Definition: ot_chaine.cpp:152
MG_EXPORT::aster_ecrire_comm_condition_limite_force_surface_volume
void aster_ecrire_comm_condition_limite_force_surface_volume(FILE *in, MG_GEOMETRIE *geo, bool stat_non_line, std::vector< std::string > &chargepresente)
Definition: mg_export.cpp:3959
MG_VOLUME_ELEMENT::get_element
virtual MG_ELEMENT_MAILLAGE * get_element(int i)
Definition: mg_volume_element.cpp:60
MAGIC::CALCUL_ASTER::RIGIDITE_DEFORMATION_PLANE
@ RIGIDITE_DEFORMATION_PLANE
Definition: mg_definition.h:142
MG_QUADRANGLE::get_noeud2
virtual MG_NOEUD * get_noeud2(void)
Definition: mg_quadrangle.cpp:150
MG_POUTRE::get_mg_boucle
virtual MG_BOUCLE * get_mg_boucle(int num)
Definition: mg_poutre.cpp:70
MG_ARETE_ELEMENT::get_element
virtual MG_ELEMENT_MAILLAGE * get_element(int i)
Definition: mg_arete_element.cpp:59
MG_ELEMENT_MAILLAGE
Definition: mg_element_maillage.h:38
OT_PARAMETRES::STRING
@ STRING
Definition: ot_parametres.h:38
MG_GEOMETRIE::get_premier_face
MG_FACE * get_premier_face(LISTE_MG_FACE::iterator &it)
Definition: mg_geometrie.cpp:1338
OT_PARAMETRES::ajouter
void ajouter(std::string chaine, double valeur, int typep, std::string aide="")
Definition: ot_parametres.cpp:61
mg_arete_element.h
MG_COFACE::get_face
virtual MG_FACE * get_face(void)
Definition: mg_coface.cpp:58
MG_SOLUTION
Definition: mg_solution.h:46
FEM_ELEMENT_MAILLAGE::get_lien_topologie
virtual class MG_ELEMENT_TOPOLOGIQUE * get_lien_topologie(void)
Definition: fem_element_maillage.cpp:89
MG_GESTIONNAIRE::get_nb_mg_solution
unsigned int get_nb_mg_solution(void)
Definition: mg_gestionnaire.cpp:837
MG_EXPORT::gmsh41entities
void gmsh41entities(std::ofstream &f, MG_GEOMETRIE *geo)
Definition: mg_export.cpp:237
MG_EXPORT::formatneutre
void formatneutre(class FEM_MAILLAGE *mai, std::string fichier)
Definition: mg_export.cpp:6246
FEM_MAILLAGE::get_suivant_xelement1
XFEM_ELEMENT1 * get_suivant_xelement1(LISTE_XFEM_ELEMENT1::iterator &it)
Definition: fem_maillage.cpp:901
MAGIC::TYPE_ENTITE::IDMG_HEXA
@ IDMG_HEXA
Definition: mg_definition.h:69
FEM_ELEMENT3
Definition: fem_element3.h:34
MG_MAILLAGE::get_nb_mg_hexa
unsigned int get_nb_mg_hexa(void)
Definition: mg_maillage.cpp:1512
FEM_MAILLAGE::get_premier_noeud
FEM_NOEUD * get_premier_noeud(LISTE_FEM_NOEUD::iterator &it)
Definition: fem_maillage.cpp:174
MG_GEOMETRIE::get_mg_poutre
MG_POUTRE * get_mg_poutre(unsigned int num)
Definition: mg_geometrie.cpp:1945
MG_COQUE::get_mg_coquille
virtual MG_COQUILLE * get_mg_coquille(int num)
Definition: mg_coque.cpp:74
FEM_SOLUTION::get_dim_solution
int get_dim_solution(void)
Definition: fem_solution.cpp:486
FEM_MAILLAGE::get_mg_geometrie
MG_GEOMETRIE * get_mg_geometrie(void)
Definition: fem_maillage.cpp:88
MAGIC::CALCUL_ASTER::RIGIDITE_CONTRAINTE_PLANE
@ RIGIDITE_CONTRAINTE_PLANE
Definition: mg_definition.h:141
MG_ELEMENT_TOPOLOGIQUE::get_dimension
virtual int get_dimension(void)=0
TPL_MAP_ENTITE::existe
virtual int existe(X x)
Definition: tpl_map_entite.h:61
MG_EXPORT::couleur
int couleur(class MG_ELEMENT_TOPOLOGIQUE *ele)
Definition: mg_export.cpp:135
MG_PENTA::get_noeud1
virtual MG_NOEUD * get_noeud1(void)
Definition: mg_penta.cpp:172
mc_materiau.h
MG_COFACE::get_orientation
virtual int get_orientation(void)
Definition: mg_coface.cpp:69
XFEM_ELEMENT1
Definition: xfem_element1.h:34
MG_EXPORT::aster_ecrire_comm_imprime_resultat_thermique
void aster_ecrire_comm_imprime_resultat_thermique(FILE *in)
Definition: mg_export.cpp:5342
MG_TRIANGLE
Definition: mg_triangle.h:38
MAGIC::CALCUL_ASTER::PLASTIQUE
@ PLASTIQUE
Definition: mg_definition.h:135
MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT3_GAUSS
@ ENTITE_ELEMENT3_GAUSS
Definition: mg_definition.h:86
MG_VOLUME
Definition: mg_volume.h:33
MG_COQUILLE
Definition: mg_coquille.h:34
MG_GESTIONNAIRE
Definition: mg_gestionnaire.h:57
OT_VECTEUR_3D::get_x
virtual double get_x(void) const
Definition: ot_mathematique.cpp:417
MG_EXPORT::aster_ecrire_comm_condition_limite_force_surface_coque
void aster_ecrire_comm_condition_limite_force_surface_coque(FILE *in, MG_GEOMETRIE *geo, bool stat_non_line, std::vector< std::string > &chargepresente)
Definition: mg_export.cpp:4024
MAGIC::CALCUL_ASTER::RIGIDITE_COQUE
@ RIGIDITE_COQUE
Definition: mg_definition.h:155
MG_MAILLAGE::get_premier_segment
MG_SEGMENT * get_premier_segment(LISTE_MG_SEGMENT::iterator &)
Definition: mg_maillage.cpp:630
FEM_SOLUTION::get_maillage
FEM_MAILLAGE * get_maillage(void)
Definition: fem_solution.cpp:472
FEM_MAILLAGE::get_premier_element0
FEM_ELEMENT0 * get_premier_element0(LISTE_FEM_ELEMENT0::iterator &it)
Definition: fem_maillage.cpp:338
MG_COFACE
Definition: mg_coface.h:33
MG_FACE_ELEMENT::get_nb_element
virtual int get_nb_element(void)
Definition: mg_face_element.cpp:148
MG_TETRA
Definition: mg_tetra.h:37
FEM_ELEMENT_MAILLAGE::get_numero
virtual int get_numero(void)
Definition: fem_element_maillage.cpp:101
MG_HEXA
Definition: mg_hexa.h:37
FEM_MAILLAGE::get_nb_xfem_element0
unsigned int get_nb_xfem_element0(void)
Definition: fem_maillage.cpp:715
MG_EXPORT::get_string_formule_stat_non_line_instant
std::string get_string_formule_stat_non_line_instant(MG_ELEMENT_TOPOLOGIQUE *ele, int num, double inst_ini, double inst_fin, std::string nom_fonction)
Definition: mg_export.cpp:5790
FEM_MAILLAGE::get_fem_element2id
FEM_ELEMENT2 * get_fem_element2id(unsigned long num)
Definition: fem_maillage.cpp:484
MG_COQUE::est_une_topo_element
virtual bool est_une_topo_element(void)
Definition: mg_coque.cpp:64
MG_SOLUTION::get_maillage
MG_MAILLAGE * get_maillage(void)
Definition: mg_solution.cpp:343
FEM_NOEUD::get_numero
int get_numero(void)
Definition: fem_noeud.cpp:328
MG_EXPORT::stl
void stl(class MG_MAILLAGE *mai, std::string fichier)
Definition: mg_export.cpp:6001
mc_gestionnaire.h
FEM_ELEMENT2
Definition: fem_element2.h:34
MAGIC::CALCUL_ASTER::PLASTIQUE_BILINEAIRE_COQUE
@ PLASTIQUE_BILINEAIRE_COQUE
Definition: mg_definition.h:150
MAGIC::CALCUL_ASTER::RIGIDITE_MIXTE_1D3D
@ RIGIDITE_MIXTE_1D3D
Definition: mg_definition.h:156
FEM_MAILLAGE::get_mg_maillage
MG_MAILLAGE * get_mg_maillage(void)
Definition: fem_maillage.cpp:93
FEM_MAILLAGE::get_nb_fem_noeud
unsigned int get_nb_fem_noeud(void)
Definition: fem_maillage.cpp:190
MG_HEXA::get_noeud5
virtual MG_NOEUD * get_noeud5(void)
Definition: mg_hexa.cpp:218
FEM_MAILLAGE::get_fem_element3id
FEM_ELEMENT3 * get_fem_element3id(unsigned long num)
Definition: fem_maillage.cpp:595
MG_QUADRANGLE
Definition: mg_quadrangle.h:39
MG_GESTIONNAIRE::get_fem_solution
FEM_SOLUTION * get_fem_solution(unsigned int num)
Definition: mg_gestionnaire.cpp:930
MG_ELEMENT_TOPOLOGIQUE::get_lien_maillage
virtual TPL_SET< MG_ELEMENT_MAILLAGE * > * get_lien_maillage(void)
Definition: mg_element_topologique.cpp:62
MG_HEXA::get_noeud8
virtual MG_NOEUD * get_noeud8(void)
Definition: mg_hexa.cpp:230
MG_POUTRE
Definition: mg_poutre.h:33
MG_HEXA::get_noeud3
virtual MG_NOEUD * get_noeud3(void)
Definition: mg_hexa.cpp:209
MG_PYRAMIDE::get_noeud4
virtual MG_NOEUD * get_noeud4(void)
Definition: mg_pyramide.cpp:178
FEM_MAILLAGE::get_premier_element2
FEM_ELEMENT2 * get_premier_element2(LISTE_FEM_ELEMENT2::iterator &it)
Definition: fem_maillage.cpp:561
MG_MAILLAGE::get_suivant_tetra
MG_TETRA * get_suivant_tetra(LISTE_MG_TETRA::iterator &it)
Definition: mg_maillage.cpp:1382
MG_EXPORT::~MG_EXPORT
~MG_EXPORT()
Definition: mg_export.cpp:96
MG_ELEMENT_TOPOLOGIQUE::get_type_ccf
virtual void get_type_ccf(int num, char *nom)
Definition: mg_element_topologique.cpp:95
MG_ELEMENT_TOPOLOGIQUE
Definition: mg_element_topologique.h:51
MG_EXPORT::aster_ecrire_comm_lire_maillage
void aster_ecrire_comm_lire_maillage(FILE *in)
Definition: mg_export.cpp:3207
MG_GESTIONNAIRE::get_mg_solution
MG_SOLUTION * get_mg_solution(unsigned int num)
Definition: mg_gestionnaire.cpp:792
MG_GEOMETRIE::get_suivant_sommet
MG_SOMMET * get_suivant_sommet(LISTE_MG_SOMMET::iterator &it)
Definition: mg_geometrie.cpp:632
TPL_LISTE_ENTITE::est_dans_la_liste
virtual int est_dans_la_liste(X x)
Definition: tpl_liste_entite.h:82
BOITE_3D::get_zmax
double get_zmax(void)
Definition: ot_boite_3d.cpp:129
MG_GEOMETRIE::get_nb_mg_poutre
unsigned int get_nb_mg_poutre(void)
Definition: mg_geometrie.cpp:1974
BOITE_3D::get_ymin
double get_ymin(void)
Definition: ot_boite_3d.cpp:114
FEM_NOEUD::get_y
virtual double get_y(double coef=0.)
Definition: fem_noeud.cpp:210
FEM_MAILLAGE::existe_reaction
int existe_reaction(void)
Definition: fem_maillage.cpp:1726
FEM_NOEUD::get_coord
virtual double * get_coord(void)
Definition: fem_noeud.cpp:254
MG_SOMMET_NOEUD::get_mg_noeud
virtual MG_NOEUD * get_mg_noeud(void)
Definition: mg_sommet_noeud.cpp:109
MG_MAILLAGE::DIMENSIONMAILLAGESANSTOPO
static int DIMENSIONMAILLAGESANSTOPO
Definition: mg_maillage.h:177
MG_EXPORT::aster_ecrire_comm_condition_limite_blocage
void aster_ecrire_comm_condition_limite_blocage(FILE *in, MG_GEOMETRIE *geo, bool coque, bool avec3d, bool stat_non_line, std::vector< std::string > &chargepresente, std::map< unsigned long, unsigned long > &gnexistant)
Definition: mg_export.cpp:4354
MG_ELEMENT_MAILLAGE::get_nouveau_numero
virtual int get_nouveau_numero(void)
Definition: mg_element_maillage.cpp:81
MAGIC::TYPE_ENTITE::IDMG_TETRA
@ IDMG_TETRA
Definition: mg_definition.h:69
MG_ARETE_ELEMENT
Definition: mg_arete_element.h:32
FEM_MAILLAGE::get_suivant_element1
FEM_ELEMENT1 * get_suivant_element1(LISTE_FEM_ELEMENT1::iterator &it)
Definition: fem_maillage.cpp:457
MG_GEOMETRIE::get_premier_poutre
MG_POUTRE * get_premier_poutre(LISTE_MG_POUTRE::iterator &it)
Definition: mg_geometrie.cpp:1957
OT_CHAINE
Definition: ot_chaine.h:29
MG_EXPORT::aster_ecrire_comm_affe_materiau_optimisation_topo
void aster_ecrire_comm_affe_materiau_optimisation_topo(FILE *in, int niveaumax, std::vector< FEM_ELEMENT3 * > *lst)
Definition: mg_export.cpp:3734
OT_CHAINE::mg_fprintf
void mg_fprintf(FILE *in, char *message)
Definition: ot_chaine.cpp:135
MAGIC::CALCUL_ASTER::ELASTIQUE_COQUE
@ ELASTIQUE_COQUE
Definition: mg_definition.h:145
f
double f(double x, long nb, double *xfonc, double *fonc, double eng, double eni, double lambda, double nor, double *fonc2)
Definition: fct_generateur_calibrage.cpp:96
MG_SOLUTION::get_entite_solution
int get_entite_solution(void)
Definition: mg_solution.cpp:483
MG_MAILLAGE::get_premier_pyramide
MG_PYRAMIDE * get_premier_pyramide(LISTE_MG_PYRAMIDE::iterator &it)
Definition: mg_maillage.cpp:2163
MG_SOLUTION::get_dim_solution
int get_dim_solution(void)
Definition: mg_solution.cpp:323
MG_EXPORT::change_param_aster
void change_param_aster(char *nomparam, double val)
Definition: mg_export.cpp:105
MG_EXPORT::aster_ecrire_comm_defi_materiau_plastique_courbe
void aster_ecrire_comm_defi_materiau_plastique_courbe(FILE *in, int nbvol, MG_GEOMETRIE *geo)
Definition: mg_export.cpp:3651
MG_ARETE_ELEMENT::get_nb_element
virtual int get_nb_element(void)
Definition: mg_arete_element.cpp:64
mg_volume_element.h
MG_EXPORT::aster_ecrire_comm_condition_limite_temperature
void aster_ecrire_comm_condition_limite_temperature(FILE *in, MG_GEOMETRIE *geo, std::vector< std::string > &chargepresente, std::map< unsigned long, unsigned long > &gnexistant)
Definition: mg_export.cpp:4586
MG_MAILLAGE::get_premier_triangle
MG_TRIANGLE * get_premier_triangle(LISTE_MG_TRIANGLE::iterator &it)
Definition: mg_maillage.cpp:912
mg_export.h
MG_HEXA::get_noeud2
virtual MG_NOEUD * get_noeud2(void)
Definition: mg_hexa.cpp:204
FEM_MAILLAGE::get_suivant_xelement0
XFEM_ELEMENT0 * get_suivant_xelement0(LISTE_XFEM_ELEMENT0::iterator &it)
Definition: fem_maillage.cpp:790
MG_EXPORT::aster_ecrire_comm_ther_non_lineaire_iteratif
void aster_ecrire_comm_ther_non_lineaire_iteratif(FILE *in, MG_GEOMETRIE *geo, int nbvol, int nbcoque, int nbpoutre, std::vector< std::string > &chargepresente, std::map< unsigned long, unsigned long > &gnexistant)
Definition: mg_export.cpp:4965
mc_propriete.h
MG_SEGMENT::get_noeud1
virtual MG_NOEUD * get_noeud1(void)
Definition: mg_segment.cpp:108
BOITE_3D::get_xmax
double get_xmax(void)
Definition: ot_boite_3d.cpp:109
OT_PARAMETRES::get_nom
std::string get_nom(std::string chaine)
Definition: ot_parametres.cpp:266
MG_EXPORT::regroupement_faces
void regroupement_faces(class MG_FACE *face, double val, TPL_LISTE_ENTITE< double > param, std::string &strlistccf, MG_GEOMETRIE *geo)
Definition: mg_export.cpp:6086
FEM_MAILLAGE
Definition: fem_maillage.h:66
MG_POUTRE::get_nb_mg_boucle
virtual int get_nb_mg_boucle(void)
Definition: mg_poutre.cpp:65
FEM_NOEUD::change_numero
void change_numero(int num)
Definition: fem_noeud.cpp:333
MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT2_GAUSS
@ ENTITE_ELEMENT2_GAUSS
Definition: mg_definition.h:86
XFEM_ELEMENT0
Definition: xfem_element0.h:36
MG_EXPORT::aster_ecrire_comm_defi_materiau_plastique_bilineaire
void aster_ecrire_comm_defi_materiau_plastique_bilineaire(FILE *in, int nbvol, int nbcoque, MG_GEOMETRIE *geo)
Definition: mg_export.cpp:3608
OT_PARAMETRES::DOUBLE
@ DOUBLE
Definition: ot_parametres.h:38
TPL_MAP_ENTITE::get_nb
virtual int get_nb(void)
Definition: tpl_map_entite.h:83
MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT2_NOEUD
@ ENTITE_ELEMENT2_NOEUD
Definition: mg_definition.h:86
MG_EXPORT::gmsh
void gmsh(class MG_MAILLAGE *mai, std::string fichier)
Definition: mg_export.cpp:803
MG_ELEMENT_TOPOLOGIQUE::get_nb_ccf
virtual int get_nb_ccf(void)
Definition: mg_element_topologique.cpp:154
MG_NOEUD
Definition: mg_noeud.h:41
MG_PENTA::get_noeud5
virtual MG_NOEUD * get_noeud5(void)
Definition: mg_penta.cpp:191
MG_EXPORT::aster_ecrire_comm_fonction_courbe_diffusion
void aster_ecrire_comm_fonction_courbe_diffusion(FILE *in, MG_GEOMETRIE *geo)
Definition: mg_export.cpp:5655
MG_EXPORT::gmsh2
void gmsh2(std::ofstream &f, MG_MAILLAGE *mai, TPL_MAP_ENTITE< MG_NOEUD * > &lstnoeud, TPL_MAP_ENTITE< MG_SEGMENT * > &lstsegment, TPL_MAP_ENTITE< MG_TRIANGLE * > &lsttriangle, TPL_MAP_ENTITE< MG_QUADRANGLE * > &lstquadrangle, TPL_MAP_ENTITE< MG_TETRA * > &lsttetra, TPL_MAP_ENTITE< MG_HEXA * > &lsthexa, TPL_MAP_ENTITE< MG_PENTA * > &lstpenta, TPL_MAP_ENTITE< MG_PYRAMIDE * > &lstpyramide)
Definition: mg_export.cpp:710
MAGIC::TYPE_ENTITE::IDMG_PYRAMIDE
@ IDMG_PYRAMIDE
Definition: mg_definition.h:69
MG_GEOMETRIE::get_mg_arete
MG_ARETE * get_mg_arete(unsigned int num)
Definition: mg_geometrie.cpp:800
MAGIC::TYPE_ENTITE::IDMG_PENTA
@ IDMG_PENTA
Definition: mg_definition.h:69
FEM_MAILLAGE::get_premier_xelement0
XFEM_ELEMENT0 * get_premier_xelement0(LISTE_XFEM_ELEMENT0::iterator &it)
Definition: fem_maillage.cpp:782
MG_GEOM_FONCTION
Definition: mg_geom_fonction.h:29
MG_PYRAMIDE::get_noeud1
virtual MG_NOEUD * get_noeud1(void)
Definition: mg_pyramide.cpp:163
constantegeo.h
MG_MAILLAGE::get_suivant_segment
MG_SEGMENT * get_suivant_segment(LISTE_MG_SEGMENT::iterator &)
Definition: mg_maillage.cpp:638
FEM_MAILLAGE::get_nb_fem_element2
unsigned int get_nb_fem_element2(void)
Definition: fem_maillage.cpp:494
FEM_ELEMENT1
Definition: fem_element1.h:34
MAGIC::CALCUL_ASTER::OPTIMISATIONTOPOLOGIQUE
@ OPTIMISATIONTOPOLOGIQUE
Definition: mg_definition.h:136
MG_GEOMETRIE::get_premier_coque
MG_COQUE * get_premier_coque(LISTE_MG_COQUE::iterator &it)
Definition: mg_geometrie.cpp:1830
MG_EXPORT::aster_ecrire_comm_definiton_ef_mixte
void aster_ecrire_comm_definiton_ef_mixte(FILE *in, MG_GEOMETRIE *geo)
Definition: mg_export.cpp:3222
TPL_LISTE_ENTITE::ajouter
virtual void ajouter(X x)
Definition: tpl_liste_entite.h:38
MG_GEOMETRIE::get_mg_geom_fonctionid
MG_GEOM_FONCTION * get_mg_geom_fonctionid(unsigned long num)
Definition: mg_geometrie.cpp:2157
MG_NOEUD::get_coord
virtual double * get_coord(void)
Definition: mg_noeud.cpp:92
MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT1_GAUSS
@ ENTITE_ELEMENT1_GAUSS
Definition: mg_definition.h:86
MG_EXPORT::aster_ecrire_comm_imprime_resultat_statique
void aster_ecrire_comm_imprime_resultat_statique(FILE *in, char *coderesu, bool avec3d, bool poutre, bool desactiveerreur)
Definition: mg_export.cpp:5076
MG_EXPORT::aster_ecrire_comm_definiton_ef_coque
void aster_ecrire_comm_definiton_ef_coque(FILE *in)
Definition: mg_export.cpp:3252
FEM_SOLUTION::get_moyenne_lineique_elementaire_champs
double get_moyenne_lineique_elementaire_champs(int numchamps, class FEM_ELEMENT1 *ele, int num, int coord)
Definition: fem_solution.cpp:785
TPL_MAP_ENTITE::ITERATEUR
std::map< unsigned long, X, std::less< unsigned long > >::iterator ITERATEUR
Definition: tpl_map_entite.h:38
MG_ELEMENT_TOPOLOGIQUE::get_formule_ccf
virtual std::string get_formule_ccf(int num)
Definition: mg_element_topologique.cpp:121
MG_SOLUTION::get_nom
std::string get_nom(void)
Definition: mg_solution.cpp:456
MG_PYRAMIDE::get_noeud2
virtual MG_NOEUD * get_noeud2(void)
Definition: mg_pyramide.cpp:168
MG_POUTRE::est_une_topo_element
virtual bool est_une_topo_element(void)
Definition: mg_poutre.cpp:47
mg_face_element.h
FEM_MAILLAGE::get_nb_fem_element3
unsigned int get_nb_fem_element3(void)
Definition: fem_maillage.cpp:605
MG_EXPORT::aster_ecrire_comm_caracteristiques_volume
void aster_ecrire_comm_caracteristiques_volume(FILE *in, int nbvolume, MG_GEOMETRIE *geo, bool &volortho)
Definition: mg_export.cpp:3410
OT_PARAMETRES
Definition: ot_parametres.h:31
FEM_MAILLAGE::get_nb_xfem_element3
unsigned int get_nb_xfem_element3(void)
Definition: fem_maillage.cpp:1050
MG_PENTA::get_noeud2
virtual MG_NOEUD * get_noeud2(void)
Definition: mg_penta.cpp:177
mg_sommet_noeud.h
MG_ELEMENT_TOPOLOGIQUE::get_formule_variable
virtual std::string get_formule_variable(int num, int num2)
Definition: mg_element_topologique.cpp:129
MG_HEXA::get_noeud6
virtual MG_NOEUD * get_noeud6(void)
Definition: mg_hexa.cpp:222
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
MG_EXPORT::param_aster
OT_PARAMETRES param_aster
Definition: mg_export.h:131
MG_GEOMETRIE::get_nb_mg_coque
unsigned int get_nb_mg_coque(void)
Definition: mg_geometrie.cpp:1847
OT_VECTEUR_3D::norme
virtual void norme(void)
Definition: ot_mathematique.cpp:494
FEM_MAILLAGE::get_suivant_element2
FEM_ELEMENT2 * get_suivant_element2(LISTE_FEM_ELEMENT2::iterator &it)
Definition: fem_maillage.cpp:569
MG_PYRAMIDE::get_noeud5
virtual MG_NOEUD * get_noeud5(void)
Definition: mg_pyramide.cpp:182
MG_ELEMENT_TOPOLOGIQUE::get_formulation_ccf
virtual char get_formulation_ccf(int num)
Definition: mg_element_topologique.cpp:89
MG_GEOMETRIE::est_virtuelle
bool est_virtuelle(void)
Definition: mg_geometrie.cpp:2588
MG_EXPORT::get_string_formule_stat_non_line
std::string get_string_formule_stat_non_line(double inst_ini, double val_ini, double inst_fin, double val_fin, std::string nom_fonction)
Definition: mg_export.cpp:5754
MG_EXPORT::aster
double aster(class MG_GEOMETRIE *geo, class FEM_MAILLAGE *mai, std::string fichier, int typeetude, char *coderesu, double penal=0., int niveaumax=0, std::vector< class FEM_ELEMENT3 * > *lst=NULL)
FEM_SOLUTION::lire
double lire(int i, int j, int coord=0, int num_no=0)
Definition: fem_solution.cpp:398
MG_MAILLAGE::get_nb_mg_segment
unsigned int get_nb_mg_segment(void)
Definition: mg_maillage.cpp:646
MG_EXPORT::aster_ecrire_comm_definiton_ef
void aster_ecrire_comm_definiton_ef(FILE *in, std::string phenomene, std::string modelisation)
Definition: mg_export.cpp:3214
MG_TRIANGLE::get_noeud2
virtual MG_NOEUD * get_noeud2(void)
Definition: mg_triangle.cpp:131
FEM_SOLUTION::get_moyenne_surfacique_elementaire_champs
double get_moyenne_surfacique_elementaire_champs(int numchamps, class FEM_ELEMENT2 *ele, int num, int coord)
Definition: fem_solution.cpp:760
MG_EXPORT::aster_ecrire_comm_defi_materiau_thermique
void aster_ecrire_comm_defi_materiau_thermique(FILE *in, int nbvol, MG_GEOMETRIE *geo, char &form)
Definition: mg_export.cpp:3520
MG_GEOMETRIE::get_mg_face
MG_FACE * get_mg_face(unsigned int num)
Definition: mg_geometrie.cpp:1251
MG_EXPORT::gmsh_avec_correspondance
void gmsh_avec_correspondance(class FEM_MAILLAGE *mai, std::string fichier)
Definition: mg_export.cpp:1031
MG_GEOMETRIE::get_premier_sommet
MG_SOMMET * get_premier_sommet(LISTE_MG_SOMMET::iterator &it)
Definition: mg_geometrie.cpp:624
MG_EXPORT::aster_ecrire_comm_condition_limite_blocage_ini
void aster_ecrire_comm_condition_limite_blocage_ini(MG_ELEMENT_TOPOLOGIQUE *ele, std::string &strlistccf, std::string &strlistccf_f, std::string &strfonction, double prescision, bool coque, bool avec3d, bool stat_non_line)
Definition: mg_export.cpp:4216
MG_MAILLAGE::get_suivant_hexa
MG_HEXA * get_suivant_hexa(LISTE_MG_HEXA::iterator &it)
Definition: mg_maillage.cpp:1660
FEM_SOLUTION::get_nom
std::string get_nom(void)
Definition: fem_solution.cpp:834
FEM_MAILLAGE::get_premier_xelement1
XFEM_ELEMENT1 * get_premier_xelement1(LISTE_XFEM_ELEMENT1::iterator &it)
Definition: fem_maillage.cpp:893
TPL_LISTE_ENTITE::get
virtual X get(int num)
Definition: tpl_liste_entite.h:72
MG_EXPORT::aster_ecrire_comm_defi_materiau_elastique_volume_optimisation
void aster_ecrire_comm_defi_materiau_elastique_volume_optimisation(FILE *in, int nbvol, MG_GEOMETRIE *geo, int niveaumax, int penal)
Definition: mg_export.cpp:3500
MG_EXPORT::aster_ecrire_comm_condition_limite_force_normale_3d
void aster_ecrire_comm_condition_limite_force_normale_3d(FILE *in, MG_GEOMETRIE *geo, bool coque, bool stat_non_line, std::vector< std::string > &chargepresente)
Definition: mg_export.cpp:4091
MG_EXPORT::get_version_aster
double get_version_aster(void)
Definition: mg_export.cpp:5989
FEM_NOEUD::get_x
virtual double get_x(double coef=0.)
Definition: fem_noeud.cpp:205
MG_VOLUME_ELEMENT
Definition: mg_volume_element.h:32
FEM_MAILLAGE::existe_deforme
int existe_deforme(void)
Definition: fem_maillage.cpp:1711
BOITE_3D::get_ymax
double get_ymax(void)
Definition: ot_boite_3d.cpp:119
MG_EXPORT::aster_ecrire_comm_condition_limite_flux_thermique
void aster_ecrire_comm_condition_limite_flux_thermique(FILE *in, MG_GEOMETRIE *geo, std::vector< std::string > &chargepresente)
Definition: mg_export.cpp:4687
FEM_MAILLAGE::get_premier_element1
FEM_ELEMENT1 * get_premier_element1(LISTE_FEM_ELEMENT1::iterator &it)
Definition: fem_maillage.cpp:449
MG_EXPORT::aster_ecrire_comm_imprime_resultat_nonli_plaque
void aster_ecrire_comm_imprime_resultat_nonli_plaque(FILE *in, char *coderesu)
Definition: mg_export.cpp:5526
FEM_NOEUD
Definition: fem_noeud.h:35
OT_VECTEUR_3D::get_y
virtual double get_y(void) const
Definition: ot_mathematique.cpp:423
MG_EXPORT::aster_ecrire_comm_caracteristiques_coque
void aster_ecrire_comm_caracteristiques_coque(FILE *in, int nbcoque, class MG_GEOMETRIE *geo, std::map< std::string, std::string > &listegroupedemaillexy)
Definition: mg_export.cpp:3333
MAGIC::CALCUL_ASTER::RIGIDITE_PLAQUE
@ RIGIDITE_PLAQUE
Definition: mg_definition.h:154
MG_GEOMETRIE::get_nb_mg_face
unsigned int get_nb_mg_face(void)
Definition: mg_geometrie.cpp:1264
OT_PARAMETRES::enregistrer
void enregistrer(char *nom)
Definition: ot_parametres.cpp:132
MG_EXPORT::aster_ecrire_comm_condition_limite_force_pontuelle
void aster_ecrire_comm_condition_limite_force_pontuelle(FILE *in, MG_GEOMETRIE *geo, bool avec3d, bool stat_non_line, std::vector< std::string > &chargepresente)
Definition: mg_export.cpp:3778
MAGIC::CALCUL_ASTER::ELASTIQUE_GROT_GDEF_PLAQUE
@ ELASTIQUE_GROT_GDEF_PLAQUE
Definition: mg_definition.h:158
MG_EXPORT::aster_ecrire_export
void aster_ecrire_export(std::string fichier, int typeetude)
Definition: mg_export.cpp:2057
MG_NOEUD::get_x
virtual double get_x(void)
Definition: mg_noeud.cpp:77
MG_EXPORT::aster_ecrire_comm_caracteristiques_poutre
void aster_ecrire_comm_caracteristiques_poutre(FILE *in, int nbpoutre, TPL_MAP_ENTITE< class FEM_ELEMENT1 * > &minipresent, MG_GEOMETRIE *geo)
Definition: mg_export.cpp:3269
acos
double2 acos(double2 &val)
Definition: ot_doubleprecision.cpp:224
MAGIC::TYPE_ENTITE::IDMG_QUADRANGLE
@ IDMG_QUADRANGLE
Definition: mg_definition.h:69
MG_EXPORT::paramversiongmsh
double paramversiongmsh(void)
Definition: mg_export.cpp:1453
MG_GEOMETRIE::get_premier_arete
MG_ARETE * get_premier_arete(LISTE_MG_ARETE::iterator &it)
Definition: mg_geometrie.cpp:907
OT_VECTEUR_3D
Definition: ot_mathematique.h:94
TPL_MAP_ENTITE::ajouter
virtual void ajouter(X x)
Definition: tpl_map_entite.h:55
MAGIC::CALCUL_ASTER::ELASTIQUE_MIXTE_1D3D
@ ELASTIQUE_MIXTE_1D3D
Definition: mg_definition.h:152
TPL_SET::get
X get(int num)
Definition: tpl_set.h:84
MG_GEOMETRIE::get_nb_mg_volume
unsigned int get_nb_mg_volume(void)
Definition: mg_geometrie.cpp:1712
MG_SOMMET_NOEUD::get_num_interne
virtual int get_num_interne(void)
Definition: mg_sommet_noeud.cpp:71
MG_EXPORT::aster_ecrire_comm_imprime_resultat_statique_non_lineaire
void aster_ecrire_comm_imprime_resultat_statique_non_lineaire(FILE *in, char *coderesu, bool avec3d)
Definition: mg_export.cpp:5468
MG_MAILLAGE::get_suivant_penta
MG_PENTA * get_suivant_penta(LISTE_MG_PENTA::iterator &it)
Definition: mg_maillage.cpp:1917
MG_TRIANGLE::get_noeud1
virtual MG_NOEUD * get_noeud1(void)
Definition: mg_triangle.cpp:126
BOITE_3D
Definition: ot_boite_3d.h:27
mg_maillage.h
MG_PENTA::get_noeud3
virtual MG_NOEUD * get_noeud3(void)
Definition: mg_penta.cpp:182
MAGIC::CALCUL_ASTER::ELASTIQUE_NON_LINEAIRE_3D_FATIGUE
@ ELASTIQUE_NON_LINEAIRE_3D_FATIGUE
Definition: mg_definition.h:161
MG_BOUCLE::get_mg_coarete
virtual MG_COARETE * get_mg_coarete(int num)
Definition: mg_boucle.cpp:84
MAGIC::CALCUL_ASTER::ELASTIQUE
@ ELASTIQUE
Definition: mg_definition.h:134
MG_TETRA::get_noeud4
virtual MG_NOEUD * get_noeud4(void)
Definition: mg_tetra.cpp:158
MAGIC::CALCUL_ASTER::PLASTIQUE_COURBE
@ PLASTIQUE_COURBE
Definition: mg_definition.h:151
mg_poutre_element.h
MAGIC::CALCUL_ASTER::PLASTIQUE_BILINEAIRE_PLAQUE
@ PLASTIQUE_BILINEAIRE_PLAQUE
Definition: mg_definition.h:149
FCT_TAILLE_METRIQUE::evaluer_decompose
virtual void evaluer_decompose(double *metrique_depart, double *valeur_propre, double *vecteur_propre)
Definition: fct_taille_metrique.cpp:31
FEM_NOEUD::get_z
virtual double get_z(double coef=0.)
Definition: fem_noeud.cpp:215
sqrt
double2 sqrt(double2 &val)
Definition: ot_doubleprecision.cpp:345
MAGIC::TYPE_ENTITE::IDMG_TRIANGLE
@ IDMG_TRIANGLE
Definition: mg_definition.h:69
FEM_ELEMENT1::get_fem_noeud
virtual class FEM_NOEUD * get_fem_noeud(int num)=0
MG_MAILLAGE::get_gestionnaire
MG_GESTIONNAIRE * get_gestionnaire(void)
Definition: mg_maillage.cpp:2658
MG_EXPORT::aster_ecrire_comm_imprime_resultat_statique_plaque
void aster_ecrire_comm_imprime_resultat_statique_plaque(FILE *in, char *coderesu)
Definition: mg_export.cpp:5147
ot_boite_3d.h
MG_EXPORT::aster_ecrire_comm_meca_statique
void aster_ecrire_comm_meca_statique(FILE *in, MG_GEOMETRIE *geo, bool vol, bool coque, bool poutre, bool desactiveerreur, bool estortho, std::vector< std::string > &chargepresente, char *coderesu)
Definition: mg_export.cpp:4725
MG_GEOMETRIE::get_suivant_poutre
MG_POUTRE * get_suivant_poutre(LISTE_MG_POUTRE::iterator &it)
Definition: mg_geometrie.cpp:1965
MAGIC::CALCUL_ASTER::CONTRAINTE_PLANE
@ CONTRAINTE_PLANE
Definition: mg_definition.h:138
FEM_MAILLAGE::get_premier_xelement2
XFEM_ELEMENT2 * get_premier_xelement2(LISTE_XFEM_ELEMENT2::iterator &it)
Definition: fem_maillage.cpp:1005
MG_MAILLAGE::get_mg_geometrie
MG_GEOMETRIE * get_mg_geometrie(void)
Definition: mg_maillage.cpp:410
MG_MAILLAGE::get_suivant_pyramide
MG_PYRAMIDE * get_suivant_pyramide(LISTE_MG_PYRAMIDE::iterator &it)
Definition: mg_maillage.cpp:2171
MG_EXPORT::aster_ecrire_comm_condition_limite_force_lineique
void aster_ecrire_comm_condition_limite_force_lineique(FILE *in, MG_GEOMETRIE *geo, bool avec3d, bool stat_non_line, std::vector< std::string > &chargepresente)
Definition: mg_export.cpp:3871
fct_taille_fem_solution.h
mg_element_topologique.h
MG_EXPORT::lire_params_aster
void lire_params_aster(char *fichier)
Definition: mg_export.cpp:100
MG_GEOMETRIE::get_valeur_unite
double get_valeur_unite(void)
Definition: mg_geometrie.cpp:2652
FEM_ELEMENT2::get_fem_noeud
virtual class FEM_NOEUD * get_fem_noeud(int num)=0
MG_ELEMENT_MAILLAGE::get_lien_topologie
MG_ELEMENT_TOPOLOGIQUE * get_lien_topologie(void)
Definition: mg_element_maillage.cpp:51
MG_EXPORT::off
void off(class MG_MAILLAGE *mai, std::string fichier)
Definition: mg_export.cpp:6028
MG_MAILLAGE::get_nb_mg_penta
unsigned int get_nb_mg_penta(void)
Definition: mg_maillage.cpp:1783
MG_ELEMENT_MAILLAGE::get_type_entite
virtual int get_type_entite()=0
FEM_SOLUTION::get_nb_gauss
int get_nb_gauss(int i)
Definition: fem_solution.cpp:443
MG_TRIANGLE::get_noeud3
virtual MG_NOEUD * get_noeud3(void)
Definition: mg_triangle.cpp:137
MAGIC::CALCUL_ASTER::ELASTIQUE_GROT_GDEF
@ ELASTIQUE_GROT_GDEF
Definition: mg_definition.h:147
MG_TETRA::get_noeud3
virtual MG_NOEUD * get_noeud3(void)
Definition: mg_tetra.cpp:153
MG_GEOMETRIE::get_premier_volume
MG_VOLUME * get_premier_volume(LISTE_MG_VOLUME::iterator &it)
Definition: mg_geometrie.cpp:1694
BOITE_3D::get_zmin
double get_zmin(void)
Definition: ot_boite_3d.cpp:124
MG_MAILLAGE::get_nb_mg_noeud
unsigned int get_nb_mg_noeud(void)
Definition: mg_maillage.cpp:476
OT_VECTEUR_3D::get_z
virtual double get_z(void) const
Definition: ot_mathematique.cpp:429
OT_CHAINE::ini_mg_fprintf
void ini_mg_fprintf(int pos, char c)
Definition: ot_chaine.cpp:128
MAGIC_VERSION
#define MAGIC_VERSION
Definition: version.h:5
MAGIC::CALCUL_ASTER::ELASTIQUE_PLAQUE
@ ELASTIQUE_PLAQUE
Definition: mg_definition.h:144
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_GEOMETRIE
Definition: mg_geometrie.h:84
GEOMETRIE::CONST::Co_SPHERE
@ Co_SPHERE
Definition: constantegeo.h:32
OT_PARAMETRES::lire
int lire(char *nom)
Definition: ot_parametres.cpp:144
MG_MAILLAGE::get_suivant_triangle
MG_TRIANGLE * get_suivant_triangle(LISTE_MG_TRIANGLE::iterator &it)
Definition: mg_maillage.cpp:920
OT_VECTEUR_3D::get_longueur
virtual double get_longueur(void) const
Definition: ot_mathematique.cpp:483
MG_VOLUME_ELEMENT::get_nb_element
virtual int get_nb_element(void)
Definition: mg_volume_element.cpp:65
MG_MAILLAGE
Definition: mg_maillage.h:62
FEM_MAILLAGE::get_degre
int get_degre(void)
Definition: fem_maillage.cpp:98
MG_GEOMETRIE::get_mg_coque
MG_COQUE * get_mg_coque(unsigned int num)
Definition: mg_geometrie.cpp:1818
FEM_MAILLAGE::get_suivant_noeud
FEM_NOEUD * get_suivant_noeud(LISTE_FEM_NOEUD::iterator &it)
Definition: fem_maillage.cpp:182
TPL_LISTE_ENTITE
Definition: tpl_liste_entite.h:32
MG_EXPORT::get_string_condition_limite_f
std::string get_string_condition_limite_f(std::string ccf, std::string nom_fonction)
Definition: mg_export.cpp:5702
MG_QUADRANGLE::get_noeud4
virtual MG_NOEUD * get_noeud4(void)
Definition: mg_quadrangle.cpp:161
MG_EXPORT::aster_ecrire_comm_ther_lineaire_iteratif
void aster_ecrire_comm_ther_lineaire_iteratif(FILE *in, MG_GEOMETRIE *geo, int nbvol, int nbcoque, int nbpoutre, std::vector< std::string > &chargepresente, std::map< unsigned long, unsigned long > &gnexistant)
Definition: mg_export.cpp:4852
MG_QUADRANGLE::get_noeud3
virtual MG_NOEUD * get_noeud3(void)
Definition: mg_quadrangle.cpp:156
MG_FACE_ELEMENT
Definition: mg_face_element.h:32
MG_COQUILLE::get_nb_mg_coface
virtual int get_nb_mg_coface(void)
Definition: mg_coquille.cpp:76
MG_COQUILLE::get_mg_coface
virtual MG_COFACE * get_mg_coface(int num)
Definition: mg_coquille.cpp:90
MG_HEXA::get_noeud7
virtual MG_NOEUD * get_noeud7(void)
Definition: mg_hexa.cpp:226
MG_MAILLAGE::get_nb_mg_tetra
unsigned int get_nb_mg_tetra(void)
Definition: mg_maillage.cpp:1262
MG_HEXA::get_noeud1
virtual MG_NOEUD * get_noeud1(void)
Definition: mg_hexa.cpp:199
res
#define res(i, j)
MG_PYRAMIDE::get_noeud3
virtual MG_NOEUD * get_noeud3(void)
Definition: mg_pyramide.cpp:173
ot_chaine.h
MAGIC::CALCUL_ASTER::PLASTIQUE_BILINEAIRE
@ PLASTIQUE_BILINEAIRE
Definition: mg_definition.h:148
MAGIC::CALCUL_ASTER::RIGIDITE_3D
@ RIGIDITE_3D
Definition: mg_definition.h:153
MG_EXPORT::aster_ecrire_comm_defi_materiau_elastique
void aster_ecrire_comm_defi_materiau_elastique(FILE *in, int nbvol, int nbcoque, int nbpoutre, bool estortho, MG_GEOMETRIE *geo)
Definition: mg_export.cpp:3434
MG_ARETE
Definition: mg_arete.h:36
MG_MAILLAGE::get_nb_mg_quadrangle
unsigned int get_nb_mg_quadrangle(void)
Definition: mg_maillage.cpp:1030
MG_FACE
Definition: mg_face.h:34
MG_QUADRANGLE::get_noeud1
virtual MG_NOEUD * get_noeud1(void)
Definition: mg_quadrangle.cpp:145
existe
int existe(const std::vector< T > &vct, double val, int &idx)
MG_COQUE
Definition: mg_coque.h:33
MAGIC::CALCUL_ASTER::ELASTIQUE_3D
@ ELASTIQUE_3D
Definition: mg_definition.h:143
MG_GESTIONNAIRE::get_nb_fem_solution
unsigned int get_nb_fem_solution(void)
Definition: mg_gestionnaire.cpp:960
ot_quadrature_gauss.h
MG_PENTA::get_noeud4
virtual MG_NOEUD * get_noeud4(void)
Definition: mg_penta.cpp:187
MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT1
@ ENTITE_ELEMENT1
Definition: mg_definition.h:86
MG_COQUE::get_nb_mg_coquille
virtual int get_nb_mg_coquille(void)
Definition: mg_coque.cpp:69
MG_ELEMENT_TOPOLOGIQUE::get_valeur_ccf
virtual bool get_valeur_ccf(char *nom, double &val)
Definition: mg_element_topologique.cpp:310
MG_EXPORT::aster_ecrire_comm_statique_non_lineaire
void aster_ecrire_comm_statique_non_lineaire(double version, FILE *in, MG_GEOMETRIE *geo, bool vol, bool coque, bool poutre, bool desactiveerreur, std::vector< std::string > &chargepresente, char *coderesu, std::string relation, std::string deformation)
Definition: mg_export.cpp:5357
FEM_MAILLAGE::get_suivant_xelement2
XFEM_ELEMENT2 * get_suivant_xelement2(LISTE_XFEM_ELEMENT2::iterator &it)
Definition: fem_maillage.cpp:1013
TPL_MAP_ENTITE::get_suivant
virtual X get_suivant(ITERATEUR &it)
Definition: tpl_map_entite.h:120
MG_SOMMET
Definition: mg_sommet.h:35
MG_GEOMETRIE::get_suivant_coque
MG_COQUE * get_suivant_coque(LISTE_MG_COQUE::iterator &it)
Definition: mg_geometrie.cpp:1838
MG_EXPORT::decompose_maillage
void decompose_maillage(MG_MAILLAGE *mai, TPL_MAP_ENTITE< class MG_NOEUD * > &lstnoeud, TPL_MAP_ENTITE< class MG_SEGMENT * > &lstsegment, TPL_MAP_ENTITE< class MG_TRIANGLE * > &lsttriangle, TPL_MAP_ENTITE< class MG_QUADRANGLE * > &lstquadrangle, TPL_MAP_ENTITE< class MG_TETRA * > &lsttetra, TPL_MAP_ENTITE< class MG_HEXA * > &lsthexa, TPL_MAP_ENTITE< class MG_PENTA * > &lstpenta, TPL_MAP_ENTITE< class MG_PYRAMIDE * > &lstpyramide)
Definition: mg_export.cpp:5928
MG_MAILLAGE::get_premier_quadrangle
MG_QUADRANGLE * get_premier_quadrangle(LISTE_MG_QUADRANGLE::iterator &it)
Definition: mg_maillage.cpp:1142
MG_ELEMENT_TOPOLOGIQUE::get_num_ccf
virtual int get_num_ccf(char *nom)
Definition: mg_element_topologique.cpp:328
cos
double2 cos(double2 &val)
Definition: ot_doubleprecision.cpp:206
FEM_MAILLAGE::get_nb_xfem_element1
unsigned int get_nb_xfem_element1(void)
Definition: fem_maillage.cpp:826
MG_SOMMET_NOEUD
Definition: mg_sommet_noeud.h:33
MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT3
@ ENTITE_ELEMENT3
Definition: mg_definition.h:86
FEM_ELEMENT0
Definition: fem_element0.h:36
MG_EXPORT::aster_ecrire_comm_condition_limite_blocage_force_temperature
void aster_ecrire_comm_condition_limite_blocage_force_temperature(MG_ELEMENT_TOPOLOGIQUE *ele, char *type_ccf, char *aster_ccf, double precision, bool stat_non_line, std::string &strlistccf, std::string &strlistccf_f, std::string &strfonction)
Definition: mg_export.cpp:5807
MG_EXPORT::aster_ecrire_comm_condition_limite
void aster_ecrire_comm_condition_limite(FILE *in, MG_GEOMETRIE *geo, bool effort, bool blocage, bool thermique, bool stat_non_line, bool volume, bool coque, bool avec3d, std::vector< std::string > &chargepresente, std::map< unsigned long, unsigned long > &gnexistant)
Definition: mg_export.cpp:3752
MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENTND_NOEUD
@ ENTITE_ELEMENTND_NOEUD
Definition: mg_definition.h:86
MG_GEOMETRIE::get_suivant_face
MG_FACE * get_suivant_face(LISTE_MG_FACE::iterator &it)
Definition: mg_geometrie.cpp:1346
MG_COARETE::get_arete
virtual MG_ARETE * get_arete(void)
Definition: mg_coarete.cpp:58
MG_EXPORT::get_string_condition_limite
std::string get_string_condition_limite(std::string ccf, double val)
Definition: mg_export.cpp:5693
MG_EXPORT::aster_ecrire_comm_defi_materiau_elastique_volume_fatigue
void aster_ecrire_comm_defi_materiau_elastique_volume_fatigue(FILE *in, int nbvol, MG_GEOMETRIE *geo, int niveaumax, int penal)
Definition: mg_export.cpp:3560
FCT_TAILLE_FEM_SOLUTION::get_isotrope
virtual bool get_isotrope(void)
Definition: fct_taille_fem_solution.cpp:390
MAGIC::CALCUL_ASTER::RIGIDITE
@ RIGIDITE
Definition: mg_definition.h:140
FEM_SOLUTION::get_entite_solution
int get_entite_solution(void)
Definition: fem_solution.cpp:393
MAGIC::CALCUL_ASTER::THERMIQUE_3D
@ THERMIQUE_3D
Definition: mg_definition.h:146
MG_MAILLAGE::get_suivant_noeud
MG_NOEUD * get_suivant_noeud(LISTE_MG_NOEUD::iterator &it)
Definition: mg_maillage.cpp:556
FEM_SOLUTION::get_moyenne_volumique_elementaire_champs
double get_moyenne_volumique_elementaire_champs(int numchamps, class FEM_ELEMENT3 *ele, int num, int coord=0)
Definition: fem_solution.cpp:709
MG_EXPORT::get_string_formule
std::string get_string_formule(MG_ELEMENT_TOPOLOGIQUE *ele, int num, std::string nom_fonction)
Definition: mg_export.cpp:5742
MG_GEOMETRIE::get_mg_volume
MG_VOLUME * get_mg_volume(unsigned int num)
Definition: mg_geometrie.cpp:1683
MG_POINT::evaluer
virtual void evaluer(double *xyz)=0
MG_FACE::get_surface
virtual MG_SURFACE * get_surface(void)
Definition: mg_face.cpp:109
MG_GEOMETRIE::get_suivant_arete
MG_ARETE * get_suivant_arete(LISTE_MG_ARETE::iterator &it)
Definition: mg_geometrie.cpp:915
MG_EXPORT::aster_ecrire_comm_ther_lineaire
void aster_ecrire_comm_ther_lineaire(FILE *in, MG_GEOMETRIE *geo, std::vector< std::string > &chargepresente)
Definition: mg_export.cpp:4810
MG_MAILLAGE::get_premier_hexa
MG_HEXA * get_premier_hexa(LISTE_MG_HEXA::iterator &it)
Definition: mg_maillage.cpp:1652
FEM_MAILLAGE::get_nb_fem_element1
unsigned int get_nb_fem_element1(void)
Definition: fem_maillage.cpp:382
MG_EXPORT::aster_ecrire_comm_solveur
std::string aster_ecrire_comm_solveur(void)
Definition: mg_export.cpp:5859
FEM_MAILLAGE::get_premier_element3
FEM_ELEMENT3 * get_premier_element3(LISTE_FEM_ELEMENT3::iterator &it)
Definition: fem_maillage.cpp:672
GEOMETRIE::CONST::Co_CYLINDRE
@ Co_CYLINDRE
Definition: constantegeo.h:32
MG_PYRAMIDE
Definition: mg_pyramide.h:37
MG_EXPORT::get_string_nom_fonction
std::string get_string_nom_fonction(std::string prefixe, long id, int base=10)
Definition: mg_export.cpp:5708
MG_EXPORT::get_base_aster
int get_base_aster(void)
Definition: mg_export.cpp:121
MG_GEOMETRIE::get_nb_mg_sommet
unsigned int get_nb_mg_sommet(void)
Definition: mg_geometrie.cpp:552
MAGIC_ASTER_VERSION_DEFAUT
#define MAGIC_ASTER_VERSION_DEFAUT
Definition: version.h:11
FEM_MAILLAGE::get_premier_xelement3
XFEM_ELEMENT3 * get_premier_xelement3(LISTE_XFEM_ELEMENT3::iterator &it)
Definition: fem_maillage.cpp:1117
MG_NOEUD::get_y
virtual double get_y(void)
Definition: mg_noeud.cpp:82
MAGIC::ENTITE_SOLUTION::ENTITE_NOEUD
@ ENTITE_NOEUD
Definition: mg_definition.h:86
sin
double2 sin(double2 &val)
Definition: ot_doubleprecision.cpp:250
MG_EXPORT::gmsh41
void gmsh41(std::ofstream &f, MG_MAILLAGE *mai, TPL_MAP_ENTITE< MG_NOEUD * > &lstnoeud, TPL_MAP_ENTITE< MG_SEGMENT * > &lstsegment, TPL_MAP_ENTITE< MG_TRIANGLE * > &lsttriangle, TPL_MAP_ENTITE< MG_QUADRANGLE * > &lstquadrangle, TPL_MAP_ENTITE< MG_TETRA * > &lsttetra, TPL_MAP_ENTITE< MG_HEXA * > &lsthexa, TPL_MAP_ENTITE< MG_PENTA * > &lstpenta, TPL_MAP_ENTITE< class MG_PYRAMIDE * > &lstpyramide)
Definition: mg_export.cpp:473
OT_PARAMETRES::change_valeur
void change_valeur(std::string chaine, double val, int num=0)
Definition: ot_parametres.cpp:210
m
#define m(i, j)