ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/aster/src/mgaster.cpp
Revision: 719
Committed: Tue Sep 8 15:34:38 2015 UTC (9 years, 11 months ago) by couturad
File size: 4837 byte(s)
Log Message:
ajout des études non lineaires dans MAGiC via code ASTER

File Contents

# Content
1 #include "gestionversion.h"
2 #include "mgaster.h"
3 #include "fem_maillage.h"
4 #include "mg_gestionnaire.h"
5 #include "mg_export.h"
6 #include "mg_import.h"
7
8
9
10
11
12
13
14
15
16
17 MGASTER::MGASTER():affichageactif(0)
18 {
19
20 }
21
22 MGASTER::MGASTER(MGASTER &mdd):affichageactif(mdd.affichageactif)
23 {
24 }
25
26
27 MGASTER::~MGASTER()
28 {
29 }
30
31 void MGASTER::active_affichage(void (*fonc)(char*))
32 {
33 affiche=fonc;
34 affichageactif=1;
35 }
36
37 int MGASTER::calcule(char* nomfichierparam,FEM_MAILLAGE* fem,char *nometude,int typeetude,char *code,bool avecenreg)
38 {
39 if (affichageactif==1) affiche((char*)"");
40 if (affichageactif==1) affiche((char*)"*************************");
41 if (affichageactif==1) affiche((char*)" Calcul par code aster");
42 if (affichageactif==1) affiche((char*)"*************************");
43 if (affichageactif==1) affiche((char*)"");
44 if (affichageactif==1) affiche((char*)"");
45 if (affichageactif==1) affiche((char*)"");
46 MG_EXPORT exp;
47 if (nomfichierparam!=NULL) exp.lire_params_aster(nomfichierparam);
48 double version;
49 int nb3=fem->get_nb_fem_element3();
50 if (nb3!=0)
51 {
52 if ((typeetude == MAGIC::CALCUL_ASTER::ELASTIQUE))
53 {
54 FEM_ELEMENT3 *ele=fem->get_fem_element3(0);
55 MG_VOLUME* vol=(MG_VOLUME*)ele->get_mg_element_maillage()->get_lien_topologie();
56 char message[500];
57 sprintf(message," Calcul sur le volume %lu",vol->get_id());
58 if (affichageactif==1) affiche(message);
59 if (code!=NULL) version=exp.aster(vol,fem,nometude,MAGIC::CALCUL_ASTER::ELASTIQUE,code);
60 else version=exp.aster(vol,fem,nometude,MAGIC::CALCUL_ASTER::ELASTIQUE,(char*)"00011111");
61 }
62 if ((typeetude == MAGIC::CALCUL_ASTER::THERMIQUE))
63 {
64 FEM_ELEMENT3 *ele=fem->get_fem_element3(0);
65 MG_VOLUME* vol=(MG_VOLUME*)ele->get_mg_element_maillage()->get_lien_topologie();
66 char message[500];
67 sprintf(message," Calcul sur le volume %lu",vol->get_id());
68 if (affichageactif==1) affiche(message);
69 version=exp.aster(vol,fem,nometude,MAGIC::CALCUL_ASTER::THERMIQUE,(char*)"");
70 }
71 if ((typeetude == MAGIC::CALCUL_ASTER::ELASTIQUE_GROT_GDEF))
72 {
73 FEM_ELEMENT3 *ele=fem->get_fem_element3(0);
74 MG_VOLUME* vol=(MG_VOLUME*)ele->get_mg_element_maillage()->get_lien_topologie();
75 char message[500];
76 sprintf(message," Calcul sur le volume %lu",vol->get_id());
77 if (affichageactif==1) affiche(message);
78 if (code!=NULL) version=exp.aster(vol,fem,nometude,MAGIC::CALCUL_ASTER::ELASTIQUE_GROT_GDEF,code);
79 else version=exp.aster(vol,fem,nometude,MAGIC::CALCUL_ASTER::ELASTIQUE_GROT_GDEF,(char*)"00011111");
80 }
81 if ((typeetude == MAGIC::CALCUL_ASTER::PLASTIQUE))
82 {
83 FEM_ELEMENT3 *ele=fem->get_fem_element3(0);
84 MG_VOLUME* vol=(MG_VOLUME*)ele->get_mg_element_maillage()->get_lien_topologie();
85 char message[500];
86 sprintf(message," Calcul sur le volume %lu",vol->get_id());
87 if (affichageactif==1) affiche(message);
88 if (code!=NULL) version=exp.aster(vol,fem,nometude,MAGIC::CALCUL_ASTER::PLASTIQUE,code);
89 else version=exp.aster(vol,fem,nometude,MAGIC::CALCUL_ASTER::PLASTIQUE,(char*)"00011111");
90 }
91 }
92 else
93 {
94 if ((typeetude == MAGIC::CALCUL_ASTER::ELASTIQUE) || (typeetude == MAGIC::CALCUL_ASTER::CONTRAINTE_PLANE) || (typeetude == MAGIC::CALCUL_ASTER::DEFORMATION_PLANE) )
95 {
96 FEM_ELEMENT2 *ele=fem->get_fem_element2(0);
97 MG_FACE* face=(MG_FACE*)ele->get_mg_element_maillage()->get_lien_topologie();
98 MG_COQUE* coq=face->get_mg_coface(0)->get_coquille()->get_mg_coque();
99 char message[500];
100 sprintf(message," Calcul sur la coque %lu",coq->get_id());
101 if (affichageactif==1) affiche(message);
102 if (code!=NULL) version=exp.aster(coq,fem,nometude,typeetude,code);
103 else version=exp.aster(coq,fem,nometude,typeetude,(char*)"11111111");
104 }
105 }
106 if (affichageactif==1)
107 {
108 char messagever[255];
109 sprintf(messagever," Calcul aster \033[1;32m%.1lf\033[1;33m ",version);
110 affiche(messagever);
111 }
112 char nomfichiertmp[255];
113 sprintf(nomfichiertmp,"%s/as_run %s.export 1>aster.log 2>&1",getenv("PATHASTER"),nometude);
114 int codesortie=system(nomfichiertmp);
115 if (codesortie!=0)
116 {
117 sprintf(nomfichiertmp," Code de sortie aster : %d",codesortie);
118 if (affichageactif==1) affiche(nomfichiertmp);
119 return codesortie;
120 }
121 if (affichageactif==1) affiche((char*)" Recuperation des resultats");
122 MG_IMPORT imp;
123 sprintf(nomfichiertmp,"%s.resu",nometude);
124 std::string res=imp.aster(fem,nomfichiertmp,nometude);
125 if (affichageactif==1) printf("%s",(char*)("\033[1;31m"+res+"\033[1;33m").c_str());
126 if (avecenreg==true)
127 {
128 if (affichageactif==1) affiche((char*)" Enregistrement MAGIC");
129 sprintf(nomfichiertmp,"%s.magic",nometude);
130 fem->get_mg_maillage()->get_gestionnaire()->enregistrer(nomfichiertmp);
131 if (affichageactif==1) affiche((char*)" Enregistrement GMSH");
132 exp.gmsh(fem,nometude);
133 }
134 }
135
136
137
138