ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/fichier/src/mg_file.cpp
Revision: 410
Committed: Fri Jul 5 21:03:49 2013 UTC (11 years, 10 months ago) by francois
File size: 64110 byte(s)
Log Message:
ajout de XFEM_TRIANGLE3
Ajout de flags dans FEM_ELEMENT_MAILLAGE
Correction de bug dans FEM_MAILLAGE_OUTILS

File Contents

# User Rev Content
1 francois 283 //------------------------------------------------------------
2     //------------------------------------------------------------
3     // MAGiC
4     // Jean Christophe Cuilli�e et Vincent FRANCOIS
5     // D�artement de G�ie M�anique - UQTR
6     //------------------------------------------------------------
7     // Le projet MAGIC est un projet de recherche du d�artement
8     // de g�ie m�anique de l'Universit�du Qu�ec �
9     // Trois Rivi�es
10     // Les librairies ne peuvent �re utilis�s sans l'accord
11     // des auteurs (contact : francois@uqtr.ca)
12     //------------------------------------------------------------
13     //------------------------------------------------------------
14     //
15     // mg_file.cpp
16     //
17     //------------------------------------------------------------
18     //------------------------------------------------------------
19     // COPYRIGHT 2000
20     // Version du 02/03/2006 �11H22
21     //------------------------------------------------------------
22     //------------------------------------------------------------
23    
24    
25     #include "gestionversion.h"
26    
27     #pragma hdrstop
28    
29     #include <string.h>
30     #include "mg_file.h"
31     #include "pars_argument.h"
32     #include "parse.h"
33     #ifdef BREP_STEP
34     #include "step_surface.h"
35     #include "step_courbe.h"
36     #include "step_point.h"
37     #endif
38     #ifdef BREP_SAT
39     #include "acis_surface.h"
40     #include "acis_courbe.h"
41     #include "acis_point.h"
42     #endif
43     #ifdef BREP_SLD
44     #include "sld_point.h"
45     #include "sld_courbe.h"
46     #include "sld_surface.h"
47     #include "sld_fonction.h"
48     #endif
49     #include "lc_point.h"
50 francois 310 #include "fem_segment2.h"
51     #include "fem_segment3.h"
52     #include "fem_triangle3.h"
53     #include "fem_triangle6.h"
54     #include "fem_quadrangle4.h"
55     #include "fem_quadrangle8.h"
56     #include "fem_tetra4.h"
57 francois 380 #include "xfem_segment2.h"
58 francois 410 #include "xfem_triangle3.h"
59 francois 339 #include "xfem_tetra4.h"
60 francois 310 #include "fem_tetra10.h"
61     #include "fem_hexa8.h"
62     #include "fem_hexa20.h"
63 francois 283 //OCC
64     #ifdef BREP_OCC
65     #include "occ_surface.h"
66     #include "occ_point.h"
67     #include "occ_courbe.h"
68     #include "occ_fonction1.h"
69     #include "TopoDS_Shape.hxx"
70     #include "TopoDS.hxx"
71     #endif
72     //---------------------------------------------------------------------------
73     // CAD4FE Headers
74     #ifdef WINDOWS_VERSION
75     #include "CAD4FE_MCEdge.h"
76     #include "CAD4FE_MCFace.h"
77     #include "CAD4FE_MCVertex.h"
78     #include "CAD4FE_PolySurface.h"
79     #include "CAD4FE_PolyCurve.h"
80     #include "CAD4FE_MCNode.h"
81     #include "CAD4FE_MCSegment.h"
82     #include "CAD4FE_MCTriangle.h"
83     #include "CAD4FE_m3d_MCTriangle.h"
84     #endif
85     //---------------------------------------------------------------------------
86    
87    
88     //---------------------------------------------------------------------------
89     #pragma package(smart_init)
90    
91     MG_FILE::MG_FILE():MG_GESTIONNAIRE()
92     {
93     }
94    
95     MG_FILE::MG_FILE(char* chemin):MG_GESTIONNAIRE()
96     {
97     code_de_lecture=lire(chemin);
98     }
99    
100     MG_FILE::~MG_FILE()
101     {
102     }
103    
104     int MG_FILE::get_code_de_lecture(void)
105     {
106     return code_de_lecture;
107     }
108    
109     long MG_FILE::cid(std::string str)
110     {
111     const char *p=str.c_str();
112     if (*p=='$') return atol(p+1);
113     return -1;
114     }
115    
116     int MG_FILE::lire(char* chemin)
117     {
118     FILE *in;
119     char ligne[3000];
120     in=fopen(chemin,"rt");
121     if (in==NULL) return 0;
122     PARS_ARGUMENT param[100];
123     PARSE parse;
124    
125     MG_GEOMETRIE *mggeo;
126     #ifdef WINDOWS_VERSION
127     std::multimap<CAD4FE::MCVertex*, unsigned long> mapMergedRefVertices;
128     #endif
129     bool updatedMergedRefVertices = false;
130    
131     do
132     {
133     int ierr;
134     std::string ligne=parse.lire(in,';',&ierr);
135     parse.decode(ligne.c_str(),"@;",param);
136     const char *chaine=param[0].argument[0].c_str();
137     if ((chaine[0]=='/') && (chaine[1]=='/'))
138     {
139     if ((chaine[2]=='*')&&(chaine[3]=='i'))
140     {
141     unsigned long id;
142     sscanf(chaine,"//*i:%lu;",&id);
143     entiteidmax=id;
144     }
145     }
146     else if (param[0].argument[0]!="FIN")
147     {
148     parse.decode(ligne.c_str(),"%@=@(@);",param);
149     std::string entite=param[1].argument[0];
150     long id=atol(param[0].argument[0].c_str());
151     std::string data=param[2].argument[0] ;
152     MG_MAILLAGE *mgmai;
153     FEM_MAILLAGE *femmai;
154     if (entite=="GEOMETRIE")
155     {
156     parse.decode(data.c_str(),"@,@,@,@",param+2);
157     double unite=atof(param[2].argument[0].c_str());
158     std::string typegeo=param[3].argument[0];
159     std::string chemin=param[4].argument[0];
160     #ifdef BREP_STEP
161     if (typegeo=="STEP")
162     {
163     fichstep.change_nom((char *)chemin.c_str());
164     int code=fichstep.lire();
165     if (code==0) return 0;
166     mggeo=new MG_GEOMETRIE((char*)"STEP",id,fichstep.get_nom(),unite);
167     ajouter_mg_geometrie(mggeo);
168     }
169     #endif
170     #ifdef BREP_SAT
171     if (typegeo=="ACIS")
172     {
173     fichsat.change_nom((char *)chemin.c_str());
174     int code=fichsat.lire();
175     if (code==0) return 0;
176     mggeo=new MG_GEOMETRIE((char*)"ACIS",id,fichsat.get_nom(),unite);
177     ajouter_mg_geometrie(mggeo);
178     }
179     #endif
180     #ifdef BREP_SLD
181     if (typegeo=="SLD")
182     {
183     fonction->Connection();
184     fonction->OuvrirFichier((char *)chemin.c_str() );
185     mggeo=new MG_GEOMETRIE((char*)"SLD",id,chemin.c_str(),unite);
186     ajouter_mg_geometrie(mggeo);
187     ouvertsld=1;
188     }
189     #endif
190    
191     #ifdef BREP_OCC
192     if (typegeo=="OCC")
193     {
194     fonction1->OuvrirFichier((char *)chemin.c_str() );
195     mggeo=new MG_GEOMETRIE((char*)"OCC",id,chemin.c_str(),unite);
196     ajouter_mg_geometrie(mggeo);
197     }
198     #endif
199    
200     std::string nommat="";
201     if (param[5].argument[0]!="")
202     nommat=param[5].argument[0];
203     mggeo->change_gest_materiau((char*)nommat.c_str());
204     }
205     if (entite=="GEOMETRIE_EPS")
206     {
207     parse.decode(data.c_str(),"@",param+2);
208     double val=atof((char*)param[2].argument[0].c_str());
209     mggeo->change_valeur_precision(val);
210     }
211     if (entite=="GROUPE_TOPOLOGIQUE")
212     {
213     parse.decode(data.c_str(),"@,(&)",param+2);
214     MG_GROUPE_TOPOLOGIQUE* mggt=new MG_GROUPE_TOPOLOGIQUE(id);
215     mggeo->ajouter_mg_groupe_topologique(mggt);
216     int nb=atoi(param[2].argument[0].c_str());
217     for (int i=0;i<nb;i++)
218     {
219     unsigned long id2=cid(param[3].argument[i].c_str());
220     MG_ELEMENT_TOPOLOGIQUE* ele;
221     ele=mggeo->get_mg_sommetid(id2);
222     if (ele==NULL) ele=mggeo->get_mg_areteid(id2);
223     if (ele==NULL) ele=mggeo->get_mg_faceid(id2);
224     if (ele==NULL) ele=mggeo->get_mg_volumeid(id2);
225     if (ele!=NULL) mggt->ajouter(ele);
226     }
227    
228     }
229     if (entite=="VOLUME")
230     {
231     parse.decode(data.c_str(),"@,@,@,@,(&)",param+2);
232     MG_VOLUME* mgvol=new MG_VOLUME(param[2].argument[0],id);
233     mggeo->ajouter_mg_volume(mgvol);
234     int nummat=atoi((char*)param[4].argument[0].c_str());
235     mgvol->change_num_materiau(nummat);
236     int nb=atoi(param[5].argument[0].c_str());
237     if (nb!=0)
238     {
239     for (int i=0;i<nb;i++)
240     {
241     parse.decode(param[6].argument[i].c_str(),"(@,@)",param+7);
242     char nom[3];
243     double val;
244     strcpy(nom,param[7].argument[0].c_str());
245     val=atof(param[8].argument[0].c_str());
246     mgvol->ajouter_ccf(nom,val);
247     }
248     }
249     }
250     if (entite=="COQUE")
251     {
252     parse.decode(data.c_str(),"@,@,@,@,(&)",param+2);
253     MG_COQUE* mgcoq=new MG_COQUE(param[2].argument[0],id);
254     mggeo->ajouter_mg_coque(mgcoq);
255     int nummat=atoi((char*)param[4].argument[0].c_str());
256     mgcoq->change_num_materiau(nummat);
257     int nb=atoi(param[5].argument[0].c_str());
258     if (nb!=0)
259     {
260     for (int i=0;i<nb;i++)
261     {
262     parse.decode(param[6].argument[i].c_str(),"(@,@)",param+7);
263     char nom[3];
264     double val;
265     strcpy(nom,param[7].argument[0].c_str());
266     val=atof(param[8].argument[0].c_str());
267     mgcoq->ajouter_ccf(nom,val);
268     }
269     }
270     }
271     if (entite=="POUTRE")
272     {
273     parse.decode(data.c_str(),"@,@,@,@,(&)",param+2);
274     MG_POUTRE* mgpoutre=new MG_POUTRE(param[2].argument[0],id);
275     mggeo->ajouter_mg_poutre(mgpoutre);
276     int nummat=atoi((char*)param[4].argument[0].c_str());
277     mgpoutre->change_num_materiau(nummat);
278     int nb=atoi(param[5].argument[0].c_str());
279     if (nb!=0)
280     {
281     for (int i=0;i<nb;i++)
282     {
283     parse.decode(param[6].argument[i].c_str(),"(@,@)",param+7);
284     char nom[3];
285     double val;
286     strcpy(nom,param[7].argument[0].c_str());
287     val=atof(param[8].argument[0].c_str());
288     mgpoutre->ajouter_ccf(nom,val);
289     }
290     }
291     }
292     if (entite=="COQUILLE")
293     {
294     parse.decode(data.c_str(),"@,@",param+2);
295     long ident=cid(param[2].argument[0]);
296     MG_VOLUME* mgvol=mggeo->get_mg_volumeid(ident);
297     MG_COQUE* mgcoq=mggeo->get_mg_coqueid(ident);
298     if (mgvol!=NULL)
299     {
300     MG_COQUILLE* mgcoq=new MG_COQUILLE(id,mgvol);
301     mggeo->ajouter_mg_coquille(mgcoq,mgvol);
302     }
303     if (mgcoq!=NULL)
304     {
305     MG_COQUILLE* mgcoquille=new MG_COQUILLE(id,mgcoq);
306     mggeo->ajouter_mg_coquille(mgcoquille,mgcoq);
307     }
308    
309     }
310     #ifdef BREP_STEP
311     if (entite=="SURFACE_STEP")
312     {
313     parse.decode(data.c_str(),"@",param+2);
314     long idstepsuf=atol(param[2].argument[0].c_str());
315     ST_SURFACE *stsurf=fichstep.lst_surface.getid(idstepsuf);
316     STEP_SURFACE* stepsurf=new STEP_SURFACE(id,stsurf);
317     mggeo->ajouter_mg_surface(stepsurf);
318     }
319     if (entite=="COURBE_STEP")
320     {
321     parse.decode(data.c_str(),"@",param+2);
322     long idstepcur=atol(param[2].argument[0].c_str());
323     ST_COURBE *stcur=fichstep.lst_courbe.getid(idstepcur);
324     STEP_COURBE* stepcur=new STEP_COURBE(id,stcur);
325     mggeo->ajouter_mg_courbe(stepcur);
326     }
327    
328     if (entite=="POINT_STEP")
329     {
330     parse.decode(data.c_str(),"@",param+2);
331     long idsteppt=atol(param[2].argument[0].c_str());
332     ST_POINT *stpt=fichstep.lst_point.getid(idsteppt);
333     STEP_POINT* steppt=new STEP_POINT(id,stpt);
334     mggeo->ajouter_mg_point(steppt);
335     }
336    
337     #endif
338     #ifdef BREP_SAT
339     if (entite=="SURFACE_SAT")
340     {
341     parse.decode(data.c_str(),"@",param+2);
342     long idsatsuf=atol(param[2].argument[0].c_str());
343     SAT_SURFACE *satsurf=fichsat.lst_surface.getid(idsatsuf);
344     ACIS_SURFACE* acissurf=new ACIS_SURFACE(id,satsurf);
345     mggeo->ajouter_mg_surface(acissurf);
346     }
347     if (entite=="COURBE_SAT")
348     {
349     parse.decode(data.c_str(),"@",param+2);
350     long idsatcur=atol(param[2].argument[0].c_str());
351     SAT_COURBE *satcur=fichsat.lst_courbe.getid(idsatcur);
352     ACIS_COURBE* aciscur=new ACIS_COURBE(id,satcur);
353     mggeo->ajouter_mg_courbe(aciscur);
354     }
355    
356     if (entite=="POINT_SAT")
357     {
358     parse.decode(data.c_str(),"@",param+2);
359     long idsatpt=atol(param[2].argument[0].c_str());
360     SAT_POINT *satpt=fichsat.lst_point.getid(idsatpt);
361     ACIS_POINT* acispt=new ACIS_POINT(id,satpt);
362     mggeo->ajouter_mg_point(acispt);
363     }
364    
365     #endif
366     #ifdef BREP_SLD
367     if (entite=="SURFACE_SLD")
368     {
369     parse.decode(data.c_str(),"@",param+2);
370     CComPtr<IFace2> swface;
371     char* idsld=(char*)param[2].argument[0].c_str();
372     SLD_SURFACE* sldsurf=new SLD_SURFACE(id,idsld,*fonction);
373     mggeo->ajouter_mg_surface(sldsurf);
374     }
375     if (entite=="COURBE_SLD")
376     {
377     parse.decode(data.c_str(),"@",param+2);
378     CComPtr<IEdge> swedge;
379     char* idsld=(char*)param[2].argument[0].c_str();
380     SLD_COURBE* sldcrb=new SLD_COURBE(id,idsld,*fonction);
381     mggeo->ajouter_mg_courbe(sldcrb);
382     }
383    
384     if (entite=="POINT_SLD")
385     {
386     parse.decode(data.c_str(),"@",param+2);
387     CComPtr<IVertex> swvertex;
388     char* idsld=(char*)param[2].argument[0].c_str();
389     SLD_POINT* sldpoint=new SLD_POINT(id,idsld,*fonction);
390     mggeo->ajouter_mg_point(sldpoint);
391     }
392    
393     #endif
394    
395     #ifdef BREP_OCC
396    
397     if (entite=="SURFACE_OCC")
398     {
399     parse.decode(data.c_str(),"@",param+2);
400     long idocc=atol(param[2].argument[0].c_str());
401     const TopoDS_Shape& occshape=fonction1->GetShape(idocc);
402     TopoDS_Face occface=TopoDS::Face(occshape);
403     OCC_SURFACE* occsurf=new OCC_SURFACE(id,occface, *fonction1);
404     mggeo->ajouter_mg_surface(occsurf);
405     }
406     if (entite=="COURBE_OCC")
407     {
408     parse.decode(data.c_str(),"@",param+2);
409     long idocc=atol(param[2].argument[0].c_str());
410     const TopoDS_Shape& occshape=fonction1->GetShape(idocc);
411     TopoDS_Edge occedge=TopoDS::Edge(occshape);
412     OCC_COURBE* occcrb=new OCC_COURBE(id,occedge, *fonction1);
413     mggeo->ajouter_mg_courbe(occcrb);
414     }
415     if (entite=="POINT_OCC")
416     {
417     parse.decode(data.c_str(),"@",param+2);
418     long idocc=atol(param[2].argument[0].c_str());
419     const TopoDS_Shape& occshape=fonction1->GetShape(idocc);
420     TopoDS_Vertex occvertex=TopoDS::Vertex(occshape);
421     OCC_POINT* occpoint=new OCC_POINT(id,occvertex, *fonction1);
422     mggeo->ajouter_mg_point(occpoint);
423     }
424     #endif
425     #ifdef WINDOWS_VERSION
426     if (entite=="CAD4FE_POLYCURVE")
427     {
428     CAD4FE::PolyCurve * polycurve = NULL;
429     parse.decode(data.c_str(),"@,(&)",param+2);
430     int nb = atoi(param[2].argument[0].c_str());
431    
432     if (nb == 0)
433     {
434     printf("PolyCurve %d is formed with reference vertex : ", id);
435     parse.decode(param[3].argument[0].c_str(),"@",param+4);
436     int idRefVertex;
437     idRefVertex=cid(param[4].argument[0].c_str());
438     printf("%d ;\n ", idRefVertex);
439     MG_SOMMET * refVertex = mggeo->get_mg_sommetid(idRefVertex);
440     polycurve = new CAD4FE::PolyCurve(refVertex);
441     }
442     else
443     {
444     printf("PolyCurve %d is formed with reference edges : ", id);
445     polycurve = new CAD4FE::PolyCurve;
446     for (int i=0;i<nb;i++)
447     {
448     parse.decode(param[3].argument[i].c_str(),"@",param+4);
449     int idRefEdge;
450     idRefEdge=cid(param[4].argument[0].c_str());
451     printf("%d ; ", idRefEdge);
452     MG_ARETE * refEdge = mggeo->get_mg_areteid(idRefEdge);
453     CAD4FE::PolyCurve tmpPC(refEdge);
454     polycurve->Merge(tmpPC);
455     }
456     printf("\n");
457     }
458    
459     polycurve->change_id(id);
460     mggeo->ajouter_mg_courbe(polycurve);
461     }
462    
463    
464     if (entite=="CAD4FE_POLYSURFACE")
465     {
466     CAD4FE::PolySurface * polysurface = new CAD4FE::PolySurface;
467     polysurface->change_id(id);
468     mggeo->ajouter_mg_surface(polysurface);
469    
470     parse.decode(data.c_str(),"@,(&)",param+2);
471    
472     int nb = atoi(param[2].argument[0].c_str());
473     printf("PolySurface %d is formed with reference faces : ", id);
474     for (int i=0;i<nb;i++)
475     {
476     parse.decode(param[3].argument[i].c_str(),"@",param+4);
477     int idRefFace;
478     idRefFace=cid(param[4].argument[0].c_str());
479     printf("%d ; ", idRefFace);
480    
481     MG_FACE * refFace = mggeo->get_mg_faceid(idRefFace);
482     CAD4FE::PolySurface tmpSF(refFace);
483     polysurface->Merge(tmpSF);
484     }
485    
486     printf("\n");
487     }
488     if (entite=="CAD4FE_MCEDGE")
489     {
490     parse.decode(data.c_str(),"@,@,@,@,@,@,(&)",param+2);
491    
492     std::string idOriginal = param[2].argument[0];
493     long idPolyCurve=cid(param[3].argument[0]);
494     CAD4FE::PolyCurve * polycurve = (CAD4FE::PolyCurve *) mggeo->get_mg_courbeid(idPolyCurve);
495    
496     // sense is not used because a MCEdge always has
497     // a sense = 1 !
498     // (because polycurve domain is equal to mcEdge domain)
499     CAD4FE::MCEdge * mcEdge = new CAD4FE::MCEdge(idOriginal, polycurve);
500     mcEdge->change_id(id);
501     mggeo->ajouter_mg_arete(mcEdge);
502    
503     int nb=atoi(param[7].argument[0].c_str());
504     if (nb!=0)
505     {
506     for (int i=0;i<nb;i++)
507     {
508     parse.decode(param[8].argument[i].c_str(),"(@,@)",param+9);
509     char nom[3];
510     double val;
511     strcpy(nom,param[9].argument[0].c_str());
512     val=atof(param[10].argument[0].c_str());
513     mcEdge->ajouter_ccf(nom,val);
514     }
515     }
516     }
517     if (entite=="CAD4FE_MCFACE")
518     {
519     parse.decode(data.c_str(),"@,@,@,@,@,(&)",param+2);
520    
521     std::string idOriginal = param[2].argument[0];
522     long idPolySurface=cid(param[3].argument[0]);
523     CAD4FE::PolySurface * polysurface = (CAD4FE::PolySurface *) mggeo->get_mg_surfaceid(idPolySurface);
524    
525     CAD4FE::MCFace * mcFace = new CAD4FE::MCFace(idOriginal, polysurface);
526     mcFace->change_id(id);
527     mggeo->ajouter_mg_face(mcFace);
528    
529     int nb=atoi(param[6].argument[0].c_str());
530     if (nb!=0)
531     {
532     for (int i=0;i<nb;i++)
533     {
534     parse.decode(param[7].argument[i].c_str(),"(@,@)",param+8);
535     char nom[3];
536     double val;
537     strcpy(nom,param[8].argument[0].c_str());
538     val=atof(param[9].argument[0].c_str());
539     mcFace->ajouter_ccf(nom,val);
540     }
541     }
542     }
543     if (entite=="CAD4FE_MCVERTEX")
544     {
545     parse.decode(data.c_str(),"@,@,@,(&),@,(&)",param+2);
546     std::string idOriginal = param[2].argument[0];
547     long idsom=cid(param[3].argument[0]);
548     MG_SOMMET * mgsom = mggeo->get_mg_sommetid(idsom);
549     CAD4FE::MCVertex * mcVertex = new CAD4FE::MCVertex(mgsom);
550     mcVertex->change_id(id);
551     mggeo->ajouter_mg_sommet(mcVertex);
552     int nb_ref_vertex=atoi(param[4].argument[0].c_str());
553     if (nb_ref_vertex!=0)
554     {
555     for (int i=0;i<nb_ref_vertex;i++)
556     {
557     unsigned long idRefVertex=cid(param[5].argument[i]);
558     mcVertex->GetMergedRefVertices()[idRefVertex] = NULL;
559     mapMergedRefVertices.insert(std::make_pair(mcVertex,idRefVertex));
560     }
561     }
562     int nb_ccf=atoi(param[4+2].argument[0].c_str());
563     if (nb_ccf!=0)
564     {
565     for (int i=0;i<nb_ccf;i++)
566     {
567     parse.decode(param[5+2].argument[i].c_str(),"(@,@)",param+6+2);
568     char nom_ccf[3];
569     double val_ccf;
570     strcpy(nom_ccf,param[6+2].argument[0].c_str());
571     val_ccf=atof(param[7+2].argument[0].c_str());
572     mgsom->ajouter_ccf(nom_ccf,val_ccf);
573     }
574     }
575     }
576     #endif
577     if (entite=="FACE")
578     {
579     parse.decode(data.c_str(),"@,@,(@),@,@,(&)",param+2);
580     long idsurf=cid(param[3].argument[0]);
581     int sens=atoi(param[5].argument[0].c_str());
582     MG_SURFACE* mgsurf=mggeo->get_mg_surfaceid(idsurf);
583     MG_FACE* mgface=new MG_FACE(param[2].argument[0],id,mgsurf,sens);
584     mggeo->ajouter_mg_face(mgface);
585     int nb=atoi(param[6].argument[0].c_str());
586     if (nb!=0)
587     {
588     for (int i=0;i<nb;i++)
589     {
590     parse.decode(param[7].argument[i].c_str(),"(@,@)",param+8);
591     char nom[3];
592     double val;
593     strcpy(nom,param[8].argument[0].c_str());
594     val=atof(param[9].argument[0].c_str());
595     mgface->ajouter_ccf(nom,val);
596     }
597     }
598     }
599     if (entite=="COFACE")
600     {
601     parse.decode(data.c_str(),"@,@,@",param+2);
602     long idface=cid(param[2].argument[0]);
603     long idcoq=cid(param[3].argument[0]);
604     int sens=atoi(param[4].argument[0].c_str());
605     MG_FACE* mgface=mggeo->get_mg_faceid(idface);
606     MG_COQUILLE* mgcoq=mggeo->get_mg_coquilleid(idcoq);
607     MG_COFACE* mgcoface=mggeo->ajouter_mg_coface(id,mgface,mgcoq,sens);
608     mgcoq->ajouter_mg_coface(mgcoface);
609     }
610     if (entite=="BOUCLE")
611     {
612     parse.decode(data.c_str(),"@,(@)",param+2);
613     long ident=cid(param[2].argument[0]);
614     MG_FACE* mgface=mggeo->get_mg_faceid(ident);
615     MG_POUTRE* mgpoutre=mggeo->get_mg_poutreid(ident);
616     if (mgface!=NULL)
617     {
618     MG_BOUCLE* mgbou=new MG_BOUCLE(id,mgface);
619     mggeo->ajouter_mg_boucle(mgbou,mgface);
620     }
621     if (mgpoutre!=NULL)
622     {
623     MG_BOUCLE* mgbou=new MG_BOUCLE(id,mgpoutre);
624     mggeo->ajouter_mg_boucle(mgbou,mgpoutre);
625     }
626     }
627     if (entite=="POINT")
628     {
629     parse.decode(data.c_str(),"@,@,@",param+2);
630     double xyz[3];
631     xyz[0]=atof(param[2].argument[0].c_str());
632     xyz[1]=atof(param[3].argument[0].c_str());
633     xyz[2]=atof(param[4].argument[0].c_str());
634     LC_POINT* point=new LC_POINT(id,xyz);
635     mggeo->ajouter_mg_point(point);
636     }
637     if (entite=="SOMMET")
638     {
639     parse.decode(data.c_str(),"@,@,@,(&)",param+2);
640     long idpoint=cid(param[3].argument[0]);
641     MG_POINT* mgpt=mggeo->get_mg_pointid(idpoint);
642     MG_SOMMET* mgsom=new MG_SOMMET(param[2].argument[0],id,mgpt);
643     mggeo->ajouter_mg_sommet(mgsom);
644     int nb=atoi(param[4].argument[0].c_str());
645     if (nb!=0)
646     {
647     for (int i=0;i<nb;i++)
648     {
649     parse.decode(param[5].argument[i].c_str(),"(@,@)",param+6);
650     char nom[3];
651     double val;
652     strcpy(nom,param[6].argument[0].c_str());
653     val=atof(param[7].argument[0].c_str());
654     mgsom->ajouter_ccf(nom,val);
655     }
656     }
657     }
658     if (entite=="ARETE")
659     {
660     parse.decode(data.c_str(),"@,@,@,@,@,@,(&)",param+2);
661     long idcur=cid(param[3].argument[0]);
662     int sens=atoi(param[6].argument[0].c_str());
663     MG_COURBE* mgcur=mggeo->get_mg_courbeid(idcur);
664     MG_ARETE* mgarete=new MG_ARETE(param[2].argument[0],id,mgcur,sens);
665     mggeo->ajouter_mg_arete(mgarete);
666     int nb=atoi(param[7].argument[0].c_str());
667     if (nb!=0)
668     {
669     for (int i=0;i<nb;i++)
670     {
671     parse.decode(param[8].argument[i].c_str(),"(@,@)",param+9);
672     char nom[3];
673     double val;
674     strcpy(nom,param[9].argument[0].c_str());
675     val=atof(param[10].argument[0].c_str());
676     mgarete->ajouter_ccf(nom,val);
677     }
678     }
679     }
680     if (entite=="COSOMMET")
681     {
682     parse.decode(data.c_str(),"@,@,@",param+2);
683     long idsom=cid(param[2].argument[0]);
684     long idarete=cid(param[3].argument[0]);
685     int num=atoi(param[4].argument[0].c_str());
686     MG_SOMMET* mgsom=mggeo->get_mg_sommetid(idsom);
687     MG_ARETE* mgarete=mggeo->get_mg_areteid(idarete);
688     MG_COSOMMET* mgcosom=mggeo->ajouter_mg_cosommet(id,mgarete,mgsom);
689     if (num==1) mgarete->changer_cosommet1(mgcosom);
690     if (num==2) mgarete->changer_cosommet2(mgcosom);
691     }
692     if (entite=="COARETE")
693     {
694     parse.decode(data.c_str(),"@,@,@",param+2);
695     long idarete=cid(param[2].argument[0]);
696     long idboucle=cid(param[3].argument[0]);
697     int sens=atoi(param[4].argument[0].c_str());
698     MG_ARETE* mgarete=mggeo->get_mg_areteid(idarete);
699     MG_BOUCLE* mgboucle=mggeo->get_mg_boucleid(idboucle);
700     MG_COARETE* mgcoarete=mggeo->ajouter_mg_coarete(id,mgarete,mgboucle,sens);
701     mgboucle->ajouter_mg_coarete(mgcoarete);
702     }
703     if (entite=="VISU_COURBE")
704     {
705     parse.decode(data.c_str(),"@,@,@,@,@,@",param+2);
706     double xyz1[3];
707     double xyz2[3];
708     xyz1[0]=atof(param[2].argument[0].c_str());
709     xyz1[1]=atof(param[3].argument[0].c_str());
710     xyz1[2]=atof(param[4].argument[0].c_str());
711     xyz2[0]=atof(param[5].argument[0].c_str());
712     xyz2[1]=atof(param[6].argument[0].c_str());
713     xyz2[2]=atof(param[7].argument[0].c_str());
714     MG_VISU_COURBE* mgcrb=new MG_VISU_COURBE(id,xyz1,xyz2);
715     mggeo->ajouter_mg_visu_courbe(mgcrb);
716     }
717     if (entite=="MAILLAGE")
718     {
719     parse.decode(data.c_str(),"@",param+2);
720     long idgeo=cid(param[2].argument[0]);
721     MG_GEOMETRIE* mggeo=get_mg_geometrieid(idgeo);
722     mgmai=new MG_MAILLAGE(id,mggeo);
723     ajouter_mg_maillage(mgmai);
724     }
725     if (entite=="FEM_MAILLAGE")
726     {
727     parse.decode(data.c_str(),"@,@,@",param+2);
728     int degre=atoi(param[2].argument[0].c_str());
729     long idmai=cid(param[3].argument[0]);
730     long idgeo=cid(param[4].argument[0]);
731     MG_GEOMETRIE* mggeo=get_mg_geometrieid(idgeo);
732     MG_MAILLAGE* mgmai=get_mg_maillageid(idmai);
733     femmai=new FEM_MAILLAGE(id,mggeo,mgmai,degre);
734     ajouter_fem_maillage(femmai);
735     }
736     if (entite=="NOEUD")
737     {
738     parse.decode(data.c_str(),"@,@,@,@,@",param+2);
739     long idtopo=cid(param[2].argument[0]);
740     double x=atof(param[3].argument[0].c_str());
741     double y=atof(param[4].argument[0].c_str());
742     double z=atof(param[5].argument[0].c_str());
743     int ori=atoi(param[6].argument[0].c_str());
744     MG_ELEMENT_TOPOLOGIQUE* topo;
745     if (idtopo>-1)
746     {
747     topo=mggeo->get_mg_sommetid(idtopo);
748     if (topo==NULL) topo=mggeo->get_mg_areteid(idtopo);
749     if (topo==NULL) topo=mggeo->get_mg_faceid(idtopo);
750     if (topo==NULL) topo=mggeo->get_mg_volumeid(idtopo);
751     }
752     else topo=NULL;
753     MG_NOEUD* noeud=new MG_NOEUD(id,topo,x,y,z,ori);
754     mgmai->ajouter_mg_noeud(noeud);
755     }
756     if (entite=="FEM_NOEUD")
757     {
758     parse.decode(data.c_str(),"@,@,@,@,@,@,@",param+2);
759     long idtopo=cid(param[2].argument[0]);
760     long idmai=cid(param[3].argument[0]);
761     double x=atof(param[4].argument[0].c_str());
762     double y=atof(param[5].argument[0].c_str());
763     double z=atof(param[6].argument[0].c_str());
764     int num=atoi(param[7].argument[0].c_str());
765     int numopt=atoi(param[8].argument[0].c_str());
766     MG_ELEMENT_MAILLAGE* elmai;
767     if (idmai>-1)
768     {
769     elmai=mgmai->get_mg_noeudid(idmai);
770     if (elmai==NULL) elmai=mgmai->get_mg_segmentid(idmai);
771     if (elmai==NULL) elmai=mgmai->get_mg_triangleid(idmai);
772     if (elmai==NULL) elmai=mgmai->get_mg_tetraid(idmai);
773     }
774     else elmai=NULL;
775     FEM_NOEUD* noeud;
776     if (elmai!=NULL) noeud=new FEM_NOEUD(id,elmai,x,y,z);
777     else
778     {
779     MG_ELEMENT_TOPOLOGIQUE* topo;
780     if (idtopo>-1)
781     {
782     topo=mggeo->get_mg_sommetid(idtopo);
783     if (topo==NULL) topo=mggeo->get_mg_areteid(idtopo);
784     if (topo==NULL) topo=mggeo->get_mg_faceid(idtopo);
785     if (topo==NULL) topo=mggeo->get_mg_volumeid(idtopo);
786     }
787     else topo=NULL;
788     noeud=new FEM_NOEUD(id,topo,x,y,z);
789     }
790     noeud->change_numero(num);
791     noeud->change_numero_opt(numopt);
792     femmai->ajouter_fem_noeud(noeud);
793     }
794     if (entite=="FEM_NOEUD_DEF")
795     {
796     parse.decode(data.c_str(),"@,@,@",param+2);
797     double x=atof(param[2].argument[0].c_str());
798     double y=atof(param[3].argument[0].c_str());
799     double z=atof(param[4].argument[0].c_str());
800     FEM_NOEUD* noeud=femmai->get_fem_noeudid(id);
801     noeud->change_dx(x);
802     noeud->change_dy(y);
803     noeud->change_dz(z);
804     femmai->active_deforme();
805     }
806 francois 325 if (entite=="FEM_NOEUD_REAC")
807     {
808     parse.decode(data.c_str(),"@,@,@",param+2);
809     double x=atof(param[2].argument[0].c_str());
810     double y=atof(param[3].argument[0].c_str());
811     double z=atof(param[4].argument[0].c_str());
812     FEM_NOEUD* noeud=femmai->get_fem_noeudid(id);
813     noeud->change_rx(x);
814     noeud->change_ry(y);
815     noeud->change_rz(z);
816 francois 339 femmai->active_reaction();;
817 francois 325 }
818 francois 283 if (entite=="SEGMENT")
819     {
820     parse.decode(data.c_str(),"@,@,@,@",param+2);
821     long idtopo=cid(param[2].argument[0]);
822     long idn1=cid(param[3].argument[0]);
823     long idn2=cid(param[4].argument[0]);
824     int ori=atoi(param[5].argument[0].c_str());
825     MG_NOEUD* noeud1=mgmai->get_mg_noeudid(idn1);
826     MG_NOEUD* noeud2=mgmai->get_mg_noeudid(idn2);
827     MG_ELEMENT_TOPOLOGIQUE* topo;
828     if (idtopo>-1)
829     {
830     topo=mggeo->get_mg_areteid(idtopo);
831     if (topo==NULL) topo=mggeo->get_mg_faceid(idtopo);
832     if (topo==NULL) topo=mggeo->get_mg_volumeid(idtopo);
833     }
834     else topo=NULL;
835     MG_SEGMENT* seg=new MG_SEGMENT(id,topo,noeud1,noeud2,ori);
836     mgmai->ajouter_mg_segment(seg);
837     }
838 francois 399 if (entite=="FEM_ELEMENT_NOEUD")
839     {
840     parse.decode(data.c_str(),"@,@,@",param+2);
841     long idtopo=cid(param[2].argument[0]);
842     long idmai=cid(param[3].argument[0]);
843     long idn1=cid(param[4].argument[0]);
844     FEM_NOEUD* tab[1];
845     tab[0]=femmai->get_fem_noeudid(idn1);
846     MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
847     if (idtopo>-1)
848     topo=mggeo->get_mg_sommetid(idtopo);
849     MG_ELEMENT_MAILLAGE* elmai;
850     if (idmai>-1)
851     elmai=mgmai->get_mg_noeudid(idmai);
852     else elmai=NULL;
853     FEM_ELEMENT0* fem=new FEM_ELEMENT0(id,topo,elmai,tab);
854     femmai->ajouter_fem_element0(fem);
855     }
856 francois 283 if (entite=="FEM_SEGMENT2")
857     {
858     parse.decode(data.c_str(),"@,@,@,@",param+2);
859 francois 378 long idtopo=cid(param[2].argument[0]);
860 francois 283 long idmai=cid(param[3].argument[0]);
861     long idn1=cid(param[4].argument[0]);
862     long idn2=cid(param[5].argument[0]);
863     FEM_NOEUD* tab[2];
864     tab[0]=femmai->get_fem_noeudid(idn1);
865     tab[1]=femmai->get_fem_noeudid(idn2);
866 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
867     if (idtopo>-1)
868     topo=mggeo->get_mg_areteid(idtopo);
869     MG_ELEMENT_MAILLAGE* elmai;
870 francois 283 if (idmai>-1)
871     elmai=mgmai->get_mg_segmentid(idmai);
872     else elmai=NULL;
873 francois 378 FEM_SEGMENT2* seg=new FEM_SEGMENT2(id,topo,elmai,tab);
874 francois 309 femmai->ajouter_fem_element1(seg);
875 francois 283 }
876     if (entite=="FEM_SEGMENT3")
877     {
878     parse.decode(data.c_str(),"@,@,@,@,@",param+2);
879 francois 378 long idtopo=cid(param[2].argument[0]);
880     long idmai=cid(param[3].argument[0]);
881 francois 283 long idn1=cid(param[4].argument[0]);
882     long idn2=cid(param[5].argument[0]);
883     long idn3=cid(param[6].argument[0]);
884     FEM_NOEUD* tab[3];
885     tab[0]=femmai->get_fem_noeudid(idn1);
886     tab[1]=femmai->get_fem_noeudid(idn2);
887     tab[2]=femmai->get_fem_noeudid(idn3);
888     MG_ELEMENT_MAILLAGE* elmai;
889 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
890     if (idtopo>-1)
891     topo=mggeo->get_mg_areteid(idtopo);
892     if (idmai>-1)
893 francois 283 elmai=mgmai->get_mg_segmentid(idmai);
894     else elmai=NULL;
895 francois 378 FEM_SEGMENT3* seg=new FEM_SEGMENT3(id,topo,elmai,tab);
896 francois 309 femmai->ajouter_fem_element1(seg);
897 francois 283 }
898     if (entite=="TRIANGLE")
899     {
900     parse.decode(data.c_str(),"@,@,@,@,@",param+2);
901     long idtopo=cid(param[2].argument[0]);
902     long idn1=cid(param[3].argument[0]);
903     long idn2=cid(param[4].argument[0]);
904     long idn3=cid(param[5].argument[0]);
905     int ori=atoi(param[6].argument[0].c_str());
906     MG_NOEUD* noeud1=mgmai->get_mg_noeudid(idn1);
907     MG_NOEUD* noeud2=mgmai->get_mg_noeudid(idn2);
908     MG_NOEUD* noeud3=mgmai->get_mg_noeudid(idn3);
909 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
910 francois 379 if (idtopo>-1)
911     {
912     topo=mggeo->get_mg_faceid(idtopo);
913     if (topo==NULL) topo=mggeo->get_mg_volumeid(idtopo);
914     }
915     mgmai->ajouter_mg_triangle(topo,noeud1,noeud2,noeud3,ori,id);
916 francois 283 }
917 francois 308 if (entite=="QUADRANGLE")
918     {
919     parse.decode(data.c_str(),"@,@,@,@,@,@",param+2);
920     long idtopo=cid(param[2].argument[0]);
921     long idn1=cid(param[3].argument[0]);
922     long idn2=cid(param[4].argument[0]);
923     long idn3=cid(param[5].argument[0]);
924     long idn4=cid(param[6].argument[0]);
925     int ori=atoi(param[7].argument[0].c_str());
926     MG_NOEUD* noeud1=mgmai->get_mg_noeudid(idn1);
927     MG_NOEUD* noeud2=mgmai->get_mg_noeudid(idn2);
928     MG_NOEUD* noeud3=mgmai->get_mg_noeudid(idn3);
929     MG_NOEUD* noeud4=mgmai->get_mg_noeudid(idn4);
930     MG_ELEMENT_TOPOLOGIQUE* topo;
931     if (idtopo>-1)
932     {
933     topo=mggeo->get_mg_faceid(idtopo);
934     if (topo==NULL) topo=mggeo->get_mg_volumeid(idtopo);
935     }
936     else topo=NULL;
937     mgmai->ajouter_mg_quadrangle(topo,noeud1,noeud2,noeud3,noeud4,ori,id);
938     }
939 francois 283 if (entite=="FEM_TRIANGLE3")
940     {
941     parse.decode(data.c_str(),"@,@,@,@,@",param+2);
942 francois 378 long idtopo=cid(param[2].argument[0]);
943 francois 283 long idmai=cid(param[3].argument[0]);
944     long idn1=cid(param[4].argument[0]);
945     long idn2=cid(param[5].argument[0]);
946     long idn3=cid(param[6].argument[0]);
947     FEM_NOEUD* tab[3];
948     tab[0]=femmai->get_fem_noeudid(idn1);
949     tab[1]=femmai->get_fem_noeudid(idn2);
950     tab[2]=femmai->get_fem_noeudid(idn3);
951     MG_ELEMENT_MAILLAGE* elmai;
952     if (idmai>-1)
953     elmai=mgmai->get_mg_triangleid(idmai);
954     else elmai=NULL;
955 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
956     if (idtopo>-1)
957 francois 383 topo=mggeo->get_mg_faceid(idtopo);
958 francois 378 FEM_TRIANGLE3* tri=new FEM_TRIANGLE3(id,topo,elmai,tab);
959 francois 309 femmai->ajouter_fem_element2(tri);
960 francois 283 }
961     if (entite=="FEM_TRIANGLE6")
962     {
963     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@",param+2);
964 francois 378 long idtopo=cid(param[2].argument[0]);
965 francois 283 long idmai=cid(param[3].argument[0]);
966     long idn1=cid(param[4].argument[0]);
967     long idn2=cid(param[5].argument[0]);
968     long idn3=cid(param[6].argument[0]);
969     long idn4=cid(param[7].argument[0]);
970     long idn5=cid(param[8].argument[0]);
971     long idn6=cid(param[9].argument[0]);
972     FEM_NOEUD* tab[6];
973     tab[0]=femmai->get_fem_noeudid(idn1);
974     tab[1]=femmai->get_fem_noeudid(idn2);
975     tab[2]=femmai->get_fem_noeudid(idn3);
976     tab[3]=femmai->get_fem_noeudid(idn4);
977     tab[4]=femmai->get_fem_noeudid(idn5);
978     tab[5]=femmai->get_fem_noeudid(idn6);
979     MG_ELEMENT_MAILLAGE* elmai;
980     if (idmai>-1)
981     elmai=mgmai->get_mg_triangleid(idmai);
982     else elmai=NULL;
983 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
984     if (idtopo>-1)
985 francois 383 topo=mggeo->get_mg_faceid(idtopo);
986 francois 378 FEM_TRIANGLE6* tri=new FEM_TRIANGLE6(id,topo,elmai,tab);
987 francois 309 femmai->ajouter_fem_element2(tri);
988 francois 283 }
989 francois 310 if (entite=="FEM_QUADRANGLE4")
990     {
991     parse.decode(data.c_str(),"@,@,@,@,@,@",param+2);
992 francois 378 long idtopo=cid(param[2].argument[0]);
993     long idmai=cid(param[3].argument[0]);
994 francois 310 long idn1=cid(param[4].argument[0]);
995     long idn2=cid(param[5].argument[0]);
996     long idn3=cid(param[6].argument[0]);
997     long idn4=cid(param[7].argument[0]);
998     FEM_NOEUD* tab[4];
999     tab[0]=femmai->get_fem_noeudid(idn1);
1000     tab[1]=femmai->get_fem_noeudid(idn2);
1001     tab[2]=femmai->get_fem_noeudid(idn3);
1002     tab[3]=femmai->get_fem_noeudid(idn4);
1003     MG_ELEMENT_MAILLAGE* elmai;
1004     if (idmai>-1)
1005     elmai=mgmai->get_mg_quadrangleid(idmai);
1006     else elmai=NULL;
1007 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1008     if (idtopo>-1)
1009 francois 383 topo=mggeo->get_mg_faceid(idtopo);
1010 francois 378 FEM_QUADRANGLE4* quad=new FEM_QUADRANGLE4(id,topo,elmai,tab);
1011 francois 310 femmai->ajouter_fem_element2(quad);
1012     }
1013     if (entite=="FEM_QUADRANGLE8")
1014     {
1015     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@",param+2);
1016 francois 378 long idtopo=cid(param[2].argument[0]);
1017     long idmai=cid(param[3].argument[0]);
1018 francois 310 long idn1=cid(param[4].argument[0]);
1019     long idn2=cid(param[5].argument[0]);
1020     long idn3=cid(param[6].argument[0]);
1021     long idn4=cid(param[7].argument[0]);
1022     long idn5=cid(param[8].argument[0]);
1023     long idn6=cid(param[9].argument[0]);
1024     long idn7=cid(param[10].argument[0]);
1025     long idn8=cid(param[11].argument[0]);
1026     FEM_NOEUD* tab[8];
1027     tab[0]=femmai->get_fem_noeudid(idn1);
1028     tab[1]=femmai->get_fem_noeudid(idn2);
1029     tab[2]=femmai->get_fem_noeudid(idn3);
1030     tab[3]=femmai->get_fem_noeudid(idn4);
1031     tab[4]=femmai->get_fem_noeudid(idn5);
1032     tab[5]=femmai->get_fem_noeudid(idn6);
1033     tab[6]=femmai->get_fem_noeudid(idn7);
1034     tab[7]=femmai->get_fem_noeudid(idn8);
1035     MG_ELEMENT_MAILLAGE* elmai;
1036     if (idmai>-1)
1037     elmai=mgmai->get_mg_quadrangleid(idmai);
1038     else elmai=NULL;
1039 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1040     if (idtopo>-1)
1041 francois 383 topo=mggeo->get_mg_faceid(idtopo);
1042 francois 378 FEM_QUADRANGLE8* quad=new FEM_QUADRANGLE8(id,topo,elmai,tab);
1043 francois 310 femmai->ajouter_fem_element2(quad);
1044     }
1045 francois 283 if (entite=="TETRAEDRE")
1046     {
1047     parse.decode(data.c_str(),"@,@,@,@,@,@",param+2);
1048     long idtopo=cid(param[2].argument[0]);
1049     long idn1=cid(param[3].argument[0]);
1050     long idn2=cid(param[4].argument[0]);
1051     long idn3=cid(param[5].argument[0]);
1052     long idn4=cid(param[6].argument[0]);
1053     int ori=atoi(param[7].argument[0].c_str());
1054     MG_NOEUD* noeud1=mgmai->get_mg_noeudid(idn1);
1055     MG_NOEUD* noeud2=mgmai->get_mg_noeudid(idn2);
1056     MG_NOEUD* noeud3=mgmai->get_mg_noeudid(idn3);
1057     MG_NOEUD* noeud4=mgmai->get_mg_noeudid(idn4);
1058     MG_ELEMENT_TOPOLOGIQUE* topo;
1059     if (idtopo>-1) topo=mggeo->get_mg_volumeid(idtopo);
1060     else topo=NULL;
1061     if (noeud1&&noeud2&&noeud3&&noeud4) mgmai->ajouter_mg_tetra(topo,noeud1,noeud2,noeud3,noeud4,ori,id);
1062     }
1063 francois 308 if (entite=="HEXAEDRE")
1064     {
1065     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@",param+2);
1066     long idtopo=cid(param[2].argument[0]);
1067     long idn1=cid(param[3].argument[0]);
1068     long idn2=cid(param[4].argument[0]);
1069     long idn3=cid(param[5].argument[0]);
1070     long idn4=cid(param[6].argument[0]);
1071     long idn5=cid(param[7].argument[0]);
1072     long idn6=cid(param[8].argument[0]);
1073     long idn7=cid(param[9].argument[0]);
1074     long idn8=cid(param[10].argument[0]);
1075     int ori=atoi(param[11].argument[0].c_str());
1076     MG_NOEUD* noeud1=mgmai->get_mg_noeudid(idn1);
1077     MG_NOEUD* noeud2=mgmai->get_mg_noeudid(idn2);
1078     MG_NOEUD* noeud3=mgmai->get_mg_noeudid(idn3);
1079     MG_NOEUD* noeud4=mgmai->get_mg_noeudid(idn4);
1080     MG_NOEUD* noeud5=mgmai->get_mg_noeudid(idn5);
1081     MG_NOEUD* noeud6=mgmai->get_mg_noeudid(idn6);
1082     MG_NOEUD* noeud7=mgmai->get_mg_noeudid(idn7);
1083     MG_NOEUD* noeud8=mgmai->get_mg_noeudid(idn8);
1084     MG_ELEMENT_TOPOLOGIQUE* topo;
1085     if (idtopo>-1) topo=mggeo->get_mg_volumeid(idtopo);
1086     else topo=NULL;
1087     mgmai->ajouter_mg_hexa(topo,noeud1,noeud2,noeud3,noeud4,noeud5,noeud6,noeud7,noeud8,ori,id);
1088     }
1089 francois 283 if (entite=="FEM_TETRA4")
1090     {
1091 francois 339 parse.decode(data.c_str(),"@,@,@,@,@,@,@",param+2);
1092 francois 378 long idtopo=cid(param[2].argument[0]);
1093     long idmai=cid(param[3].argument[0]);
1094 francois 283 long idn1=cid(param[4].argument[0]);
1095     long idn2=cid(param[5].argument[0]);
1096     long idn3=cid(param[6].argument[0]);
1097     long idn4=cid(param[7].argument[0]);
1098 francois 339 long etat=atoi(param[8].argument[0].c_str());
1099 francois 283 FEM_NOEUD* tab[4];
1100     tab[0]=femmai->get_fem_noeudid(idn1);
1101     tab[1]=femmai->get_fem_noeudid(idn2);
1102     tab[2]=femmai->get_fem_noeudid(idn3);
1103     tab[3]=femmai->get_fem_noeudid(idn4);
1104     MG_ELEMENT_MAILLAGE* elmai;
1105     if (idmai>-1)
1106     elmai=mgmai->get_mg_tetraid(idmai);
1107     else elmai=NULL;
1108 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1109     if (idtopo>-1)
1110 francois 393 topo=mggeo->get_mg_volumeid(idtopo);
1111 francois 378 FEM_TETRA4* tet=new FEM_TETRA4(id,topo,elmai,tab);
1112 francois 410 tet->change_etat(0,etat);
1113 francois 309 femmai->ajouter_fem_element3(tet);
1114 francois 283 }
1115 francois 399 if (entite=="XFEM_ELEMENT_NOEUD")
1116 francois 339 {
1117 francois 380 parse.decode(data.c_str(),"@,@,@,@",param+2);
1118 francois 399 unsigned long idele=cid(param[2].argument[0]);
1119     unsigned long idtopo=cid(param[3].argument[0]);
1120     unsigned long idn1=cid(param[4].argument[0]);
1121 francois 380 int etat=atoi(param[5].argument[0].c_str());
1122 francois 399 MG_ELEMENT_TOPOLOGIQUE* topo=mggeo->get_mg_sommetid(idtopo);
1123     FEM_ELEMENT_MAILLAGE* mai=femmai->get_fem_element0id(idele);
1124     if (mai==NULL) mai=femmai->get_fem_element1id(idele);
1125     if (mai==NULL) mai=femmai->get_fem_element2id(idele);
1126     if (mai==NULL) mai=femmai->get_fem_element3id(idele);
1127 francois 380 FEM_NOEUD* tab[4];
1128     tab[0]=femmai->get_fem_noeudid(idn1);
1129 francois 399 XFEM_ELEMENT0* xele=new XFEM_ELEMENT0(id,mai,topo,tab);
1130     femmai->ajouter_xfem_element0(xele);
1131     xele->change_etat(etat);
1132     }
1133     if (entite=="XFEM_SEGMENT2")
1134     {
1135     parse.decode(data.c_str(),"@,@,@,@,@",param+2);
1136     unsigned long idele=cid(param[2].argument[0]);
1137     unsigned long idtopo=cid(param[3].argument[0]);
1138     unsigned long idn1=cid(param[4].argument[0]);
1139     unsigned long idn2=cid(param[5].argument[0]);
1140     int etat=atoi(param[6].argument[0].c_str());
1141     FEM_ELEMENT_MAILLAGE* mai=femmai->get_fem_element1id(idele);
1142     if (mai==NULL) mai=femmai->get_fem_element2id(idele);
1143     if (mai==NULL) mai=femmai->get_fem_element3id(idele);
1144     MG_ELEMENT_TOPOLOGIQUE* topo=mggeo->get_mg_areteid(idtopo);
1145     FEM_NOEUD* tab[4];
1146     tab[0]=femmai->get_fem_noeudid(idn1);
1147 francois 380 tab[1]=femmai->get_fem_noeudid(idn2);
1148 francois 399 XFEM_SEGMENT2* xseg=new XFEM_SEGMENT2(id,mai,topo,tab);
1149 francois 380 femmai->ajouter_xfem_element1(xseg);
1150 francois 399 xseg->change_etat(etat);
1151 francois 380 }
1152 francois 410 if (entite=="XFEM_TRIANGLE3")
1153     {
1154     parse.decode(data.c_str(),"@,@,@,@,@,@",param+2);
1155     unsigned long idtet=cid(param[2].argument[0]);
1156     unsigned long idtopo=cid(param[3].argument[0]);
1157     unsigned long idn1=cid(param[4].argument[0]);
1158     unsigned long idn2=cid(param[5].argument[0]);
1159     unsigned long idn3=cid(param[6].argument[0]);
1160     int etat=atoi(param[7].argument[0].c_str());
1161     FEM_ELEMENT_MAILLAGE* mai=femmai->get_fem_element3id(idtet);
1162     MG_ELEMENT_TOPOLOGIQUE* topo=mggeo->get_mg_volumeid(idtopo);
1163     FEM_NOEUD* tab[3];
1164     tab[0]=femmai->get_fem_noeudid(idn1);
1165     tab[1]=femmai->get_fem_noeudid(idn2);
1166     tab[2]=femmai->get_fem_noeudid(idn3);
1167     XFEM_TRIANGLE3* xtri=new XFEM_TRIANGLE3(id,mai,topo,tab);
1168     femmai->ajouter_xfem_element2(xtri);
1169     xtri->change_etat(etat);
1170     }
1171 francois 380 if (entite=="XFEM_TETRA4")
1172     {
1173 francois 399 parse.decode(data.c_str(),"@,@,@,@,@,@,@",param+2);
1174 francois 339 unsigned long idtet=cid(param[2].argument[0]);
1175 francois 399 unsigned long idtopo=cid(param[3].argument[0]);
1176     unsigned long idn1=cid(param[4].argument[0]);
1177     unsigned long idn2=cid(param[5].argument[0]);
1178     unsigned long idn3=cid(param[6].argument[0]);
1179     unsigned long idn4=cid(param[7].argument[0]);
1180     int etat=atoi(param[8].argument[0].c_str());
1181 francois 408 FEM_ELEMENT_MAILLAGE* mai=femmai->get_fem_element3id(idtet);
1182 francois 399 MG_ELEMENT_TOPOLOGIQUE* topo=mggeo->get_mg_volumeid(idtopo);
1183     FEM_NOEUD* tab[4];
1184 francois 378 tab[0]=femmai->get_fem_noeudid(idn1);
1185     tab[1]=femmai->get_fem_noeudid(idn2);
1186     tab[2]=femmai->get_fem_noeudid(idn3);
1187     tab[3]=femmai->get_fem_noeudid(idn4);
1188 francois 399 XFEM_TETRA4* xtet=new XFEM_TETRA4(id,mai,topo,tab);
1189 francois 339 femmai->ajouter_xfem_element3(xtet);
1190 francois 383 xtet->change_etat(etat);
1191 francois 339 }
1192 francois 283 if (entite=="FEM_TETRA10")
1193     {
1194     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@,@,@",param+2);
1195 francois 378 long idtopo=cid(param[2].argument[0]);
1196     long idmai=cid(param[3].argument[0]);
1197 francois 283 long idn1=cid(param[4].argument[0]);
1198     long idn2=cid(param[5].argument[0]);
1199     long idn3=cid(param[6].argument[0]);
1200     long idn4=cid(param[7].argument[0]);
1201     long idn5=cid(param[8].argument[0]);
1202     long idn6=cid(param[9].argument[0]);
1203     long idn7=cid(param[10].argument[0]);
1204     long idn8=cid(param[11].argument[0]);
1205     long idn9=cid(param[12].argument[0]);
1206     long idn10=cid(param[13].argument[0]);
1207     FEM_NOEUD* tab[10];
1208     tab[0]=femmai->get_fem_noeudid(idn1);
1209     tab[1]=femmai->get_fem_noeudid(idn2);
1210     tab[2]=femmai->get_fem_noeudid(idn3);
1211     tab[3]=femmai->get_fem_noeudid(idn4);
1212     tab[4]=femmai->get_fem_noeudid(idn5);
1213     tab[5]=femmai->get_fem_noeudid(idn6);
1214     tab[6]=femmai->get_fem_noeudid(idn7);
1215     tab[7]=femmai->get_fem_noeudid(idn8);
1216     tab[8]=femmai->get_fem_noeudid(idn9);
1217     tab[9]=femmai->get_fem_noeudid(idn10);
1218     MG_ELEMENT_MAILLAGE* elmai;
1219     if (idmai>-1)
1220     elmai=mgmai->get_mg_tetraid(idmai);
1221     else elmai=NULL;
1222 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1223     if (idtopo>-1)
1224 francois 393 topo=mggeo->get_mg_volumeid(idtopo);
1225 francois 378 FEM_TETRA10* tet=new FEM_TETRA10(id,topo,elmai,tab);
1226 francois 309 femmai->ajouter_fem_element3(tet);
1227 francois 283 }
1228 francois 310 if (entite=="FEM_HEXA8")
1229     {
1230     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@",param+2);
1231 francois 378 long idtopo=cid(param[2].argument[0]);
1232     long idmai=cid(param[3].argument[0]);
1233 francois 310 long idn1=cid(param[4].argument[0]);
1234     long idn2=cid(param[5].argument[0]);
1235     long idn3=cid(param[6].argument[0]);
1236     long idn4=cid(param[7].argument[0]);
1237     long idn5=cid(param[8].argument[0]);
1238     long idn6=cid(param[9].argument[0]);
1239     long idn7=cid(param[10].argument[0]);
1240     long idn8=cid(param[11].argument[0]);
1241     FEM_NOEUD* tab[8];
1242     tab[0]=femmai->get_fem_noeudid(idn1);
1243     tab[1]=femmai->get_fem_noeudid(idn2);
1244     tab[2]=femmai->get_fem_noeudid(idn3);
1245     tab[3]=femmai->get_fem_noeudid(idn4);
1246     tab[4]=femmai->get_fem_noeudid(idn5);
1247     tab[5]=femmai->get_fem_noeudid(idn6);
1248     tab[6]=femmai->get_fem_noeudid(idn7);
1249     tab[7]=femmai->get_fem_noeudid(idn8);
1250     MG_ELEMENT_MAILLAGE* elmai;
1251     if (idmai>-1)
1252     elmai=mgmai->get_mg_hexaid(idmai);
1253     else elmai=NULL;
1254 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1255     if (idtopo>-1)
1256 francois 393 topo=mggeo->get_mg_volumeid(idtopo);
1257 francois 378 FEM_HEXA8* hex=new FEM_HEXA8(id,topo,elmai,tab);
1258 francois 310 femmai->ajouter_fem_element3(hex);
1259     }
1260     if (entite=="FEM_HEXA20")
1261     {
1262     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@",param+2);
1263 francois 378 long idtopo=cid(param[2].argument[0]);
1264     long idmai=cid(param[3].argument[0]);
1265 francois 310 long idn1=cid(param[4].argument[0]);
1266     long idn2=cid(param[5].argument[0]);
1267     long idn3=cid(param[6].argument[0]);
1268     long idn4=cid(param[7].argument[0]);
1269     long idn5=cid(param[8].argument[0]);
1270     long idn6=cid(param[9].argument[0]);
1271     long idn7=cid(param[10].argument[0]);
1272     long idn8=cid(param[11].argument[0]);
1273     long idn9=cid(param[12].argument[0]);
1274     long idn10=cid(param[13].argument[0]);
1275     long idn11=cid(param[14].argument[0]);
1276     long idn12=cid(param[15].argument[0]);
1277     long idn13=cid(param[16].argument[0]);
1278     long idn14=cid(param[17].argument[0]);
1279     long idn15=cid(param[18].argument[0]);
1280     long idn16=cid(param[19].argument[0]);
1281     long idn17=cid(param[20].argument[0]);
1282     long idn18=cid(param[21].argument[0]);
1283     long idn19=cid(param[22].argument[0]);
1284     long idn20=cid(param[23].argument[0]);
1285     FEM_NOEUD* tab[20];
1286     tab[0]=femmai->get_fem_noeudid(idn1);
1287     tab[1]=femmai->get_fem_noeudid(idn2);
1288     tab[2]=femmai->get_fem_noeudid(idn3);
1289     tab[3]=femmai->get_fem_noeudid(idn4);
1290     tab[4]=femmai->get_fem_noeudid(idn5);
1291     tab[5]=femmai->get_fem_noeudid(idn6);
1292     tab[6]=femmai->get_fem_noeudid(idn7);
1293     tab[7]=femmai->get_fem_noeudid(idn8);
1294     tab[8]=femmai->get_fem_noeudid(idn9);
1295     tab[9]=femmai->get_fem_noeudid(idn10);
1296     tab[10]=femmai->get_fem_noeudid(idn11);
1297     tab[11]=femmai->get_fem_noeudid(idn12);
1298     tab[12]=femmai->get_fem_noeudid(idn13);
1299     tab[13]=femmai->get_fem_noeudid(idn14);
1300     tab[14]=femmai->get_fem_noeudid(idn15);
1301     tab[15]=femmai->get_fem_noeudid(idn16);
1302     tab[16]=femmai->get_fem_noeudid(idn17);
1303     tab[17]=femmai->get_fem_noeudid(idn18);
1304     tab[18]=femmai->get_fem_noeudid(idn19);
1305     tab[19]=femmai->get_fem_noeudid(idn20);
1306     MG_ELEMENT_MAILLAGE* elmai;
1307     if (idmai>-1)
1308     elmai=mgmai->get_mg_hexaid(idmai);
1309     else elmai=NULL;
1310 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1311     if (idtopo>-1)
1312 francois 393 topo=mggeo->get_mg_volumeid(idtopo);
1313 francois 378 FEM_HEXA20* hex=new FEM_HEXA20(id,topo,elmai,tab);
1314 francois 310 femmai->ajouter_fem_element3(hex);
1315     }
1316 francois 283 if (entite=="SOLUTION")
1317     {
1318 francois 377 parse.decode(data.c_str(),"@,@,@,@,@,@,(&)",param+2);
1319 francois 283 int typeentite=atoi(param[2].argument[0].c_str());
1320 francois 377 int typesolution=atoi(param[3].argument[0].c_str());
1321     std::string nomsol=param[4].argument[0];
1322     long idmai=cid(param[5].argument[0]);
1323     int nb=atoi(param[6].argument[0].c_str());
1324     std::string chemin=param[7].argument[0];
1325 francois 283 MG_MAILLAGE* mai=get_mg_maillageid(idmai);
1326 francois 377 MG_SOLUTION* sol=new MG_SOLUTION(id,mai,nb,(char*)chemin.c_str(),SOL_EXISTANTE,nomsol,typeentite,typesolution);
1327 francois 283 ajouter_mg_solution(sol);
1328     for (int i=0;i<nb;i++)
1329 francois 377 sol->change_legende(i,param[8].argument[i]);
1330 francois 283 }
1331     if (entite=="FEM_SOLUTION")
1332     {
1333 francois 375 parse.decode(data.c_str(),"@,@,@,@,@,@,(&)",param+2);
1334 francois 283 int typeentite=atoi(param[2].argument[0].c_str());
1335 francois 375 int typesolution=atoi(param[3].argument[0].c_str());
1336     std::string nomsol=param[4].argument[0];
1337     long idmai=cid(param[5].argument[0]);
1338     int nb=atoi(param[6].argument[0].c_str());
1339     std::string chemin=param[7].argument[0];
1340 francois 283 FEM_MAILLAGE* mai=get_fem_maillageid(idmai);
1341 francois 375 FEM_SOLUTION* sol=new FEM_SOLUTION(id,mai,nb,(char*)chemin.c_str(),SOL_EXISTANTE,nomsol,typeentite,typesolution);
1342 francois 283 ajouter_fem_solution(sol);
1343     for (int i=0;i<nb;i++)
1344 francois 375 sol->change_legende(i,param[8].argument[i]);
1345 francois 283 }
1346     #ifdef WINDOWS_VERSION
1347     if (entite=="CAD4FE_MCSEGMENT")
1348     {
1349     parse.decode(data.c_str(),"@,@,@",param+2);
1350     long idtopo=cid(param[2].argument[0]);
1351     long idn1=cid(param[3].argument[0]);
1352     long idn2=cid(param[4].argument[0]);
1353     CAD4FE::MCNode* noeud1=(CAD4FE::MCNode*)mgmai->get_mg_noeudid(idn1);
1354     CAD4FE::MCNode* noeud2=(CAD4FE::MCNode*)mgmai->get_mg_noeudid(idn2);
1355     MG_ELEMENT_TOPOLOGIQUE* topo;
1356     if (idtopo>-1)
1357     {
1358     topo=mggeo->get_mg_areteid(idtopo);
1359     if (topo==NULL) topo=mggeo->get_mg_faceid(idtopo);
1360     if (topo==NULL) topo=mggeo->get_mg_volumeid(idtopo);
1361     }
1362     else topo=NULL;
1363     CAD4FE::MCSegment * seg = new CAD4FE::MCSegment(id,topo,noeud1,noeud2);
1364     mgmai->ajouter_mg_segment(seg);
1365     }
1366     if (entite=="CAD4FE_MCNODE")
1367     {
1368     parse.decode(data.c_str(),"@,@,@,@,@",param+2);
1369     long idRefTopo=cid(param[2].argument[0]);
1370     long idMCTopo=cid(param[3].argument[0]);
1371     double x=atof(param[4].argument[0].c_str());
1372     double y=atof(param[5].argument[0].c_str());
1373     double z=atof(param[6].argument[0].c_str());
1374     MG_ELEMENT_TOPOLOGIQUE* refTopo=NULL;
1375     if (refTopo==NULL) refTopo=mggeo->get_mg_sommetid(idRefTopo);
1376     if (refTopo==NULL) refTopo=mggeo->get_mg_areteid(idRefTopo);
1377     if (refTopo==NULL) refTopo=mggeo->get_mg_faceid(idRefTopo);
1378     if (refTopo==NULL) refTopo=mggeo->get_mg_volumeid(idRefTopo);
1379     MG_ELEMENT_TOPOLOGIQUE* mcTopo=NULL;
1380     if (mcTopo==NULL) mcTopo=mggeo->get_mg_sommetid(idMCTopo);
1381     if (mcTopo==NULL) mcTopo=mggeo->get_mg_areteid(idMCTopo);
1382     if (mcTopo==NULL) mcTopo=mggeo->get_mg_faceid(idMCTopo);
1383     if (mcTopo==NULL) mcTopo=mggeo->get_mg_volumeid(idMCTopo);
1384    
1385     if (mcTopo->get_dimension()==0)
1386     {
1387     if (updatedMergedRefVertices == false)
1388     {
1389     for (std::multimap<CAD4FE::MCVertex * , unsigned long>::iterator itMergedRefVertices = mapMergedRefVertices.begin();
1390     itMergedRefVertices != mapMergedRefVertices.end();
1391     itMergedRefVertices++)
1392     {
1393     CAD4FE::MCVertex * v = itMergedRefVertices->first;
1394     MG_SOMMET * refV = NULL;
1395     unsigned long id = itMergedRefVertices->second;
1396     refV = (MG_SOMMET *) mggeo->get_mg_sommetid(id);
1397     v->MergeRefVertex(refV);
1398     }
1399    
1400     updatedMergedRefVertices = true;
1401     }
1402     }
1403    
1404     CAD4FE::MCNode* noeud=new CAD4FE::MCNode(id,mcTopo,refTopo,x,y,z);
1405     mgmai->ajouter_mg_noeud(noeud);
1406     }
1407     if (entite=="CAD4FE_MCTRIANGLE")
1408     {
1409     parse.decode(data.c_str(),"@,@,@,@",param+2);
1410     long idtopo=cid(param[2].argument[0]);
1411     long idn1=cid(param[3].argument[0]);
1412     long idn2=cid(param[4].argument[0]);
1413     long idn3=cid(param[5].argument[0]);
1414     CAD4FE::MCNode* noeud1=(CAD4FE::MCNode*)mgmai->get_mg_noeudid(idn1);
1415     CAD4FE::MCNode* noeud2=(CAD4FE::MCNode*)mgmai->get_mg_noeudid(idn2);
1416     CAD4FE::MCNode* noeud3=(CAD4FE::MCNode*)mgmai->get_mg_noeudid(idn3);
1417     CAD4FE::MCSegment* mgsegment[3];
1418     CAD4FE::MCNode *mgnoeud[3]={noeud1,noeud2,noeud3};
1419     // la topo. d'un MCTriangle est obligatoirement une MCFace
1420     CAD4FE::MCFace* mcFace=(CAD4FE::MCFace*)mggeo->get_mg_faceid(idtopo);
1421     for (int i=0;i<3;i++)
1422     {
1423     mgsegment[i]=(CAD4FE::MCSegment*)mgmai->get_mg_segment(mgnoeud[i]->get_id(),mgnoeud[(i+1)%3]->get_id());
1424     if (mgsegment[i]==NULL)
1425     {
1426     mgsegment[i]=new CAD4FE::MCSegment(mcFace,mgnoeud[i],mgnoeud[(i+1)%3]);
1427     mgmai->ajouter_mg_segment(mgsegment[i]);
1428     }
1429     }
1430     CAD4FE::M3D_MCTriangle *triangle = new CAD4FE::M3D_MCTriangle(id,mcFace,noeud1,noeud2,noeud3,mgsegment[0],mgsegment[1],mgsegment[2]);
1431     mgmai->ajouter_mg_triangle(triangle);
1432     }
1433     #endif
1434     }
1435     }
1436     while (param[0].argument[0]!="FIN");
1437     #ifdef WINDOWS_VERSION
1438     if (updatedMergedRefVertices == false)
1439     {
1440     for (std::multimap<CAD4FE::MCVertex * , unsigned long>::iterator itMergedRefVertices = mapMergedRefVertices.begin();
1441     itMergedRefVertices != mapMergedRefVertices.end();
1442     itMergedRefVertices++)
1443     {
1444     CAD4FE::MCVertex * v = itMergedRefVertices->first;
1445     MG_SOMMET * refV = NULL;
1446     unsigned long id = itMergedRefVertices->second;
1447     refV = (MG_SOMMET *) mggeo->get_mg_sommetid(id);
1448     v->MergeRefVertex(refV);
1449     }
1450    
1451     updatedMergedRefVertices = true;
1452     }
1453    
1454     #endif
1455     fclose(in);
1456     #ifdef BREP_SLD
1457     fonction->Fermer();
1458     #endif
1459     return 1;
1460     }
1461    
1462    
1463    
1464