ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/aster/src/mgaster.cpp
Revision: 1008
Committed: Mon Mar 25 16:37:35 2019 UTC (6 years, 1 month ago) by francois
File size: 7316 byte(s)
Log Message:
parametrisation de la methode de calcul des polycristaux

File Contents

# User Rev Content
1 francois 326 #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 francois 773 #include "mglanceuraster.h"
8 couturad 919 #include <sys/stat.h>
9     #include <fstream>
10 francois 326
11    
12    
13    
14    
15    
16    
17    
18 francois 470 MGASTER::MGASTER():affichageactif(0)
19 francois 326 {
20 francois 725 ini_param();
21 francois 326
22     }
23    
24 francois 470 MGASTER::MGASTER(MGASTER &mdd):affichageactif(mdd.affichageactif)
25 francois 326 {
26 francois 725 ini_param();
27 francois 326 }
28    
29    
30     MGASTER::~MGASTER()
31     {
32     }
33    
34     void MGASTER::active_affichage(void (*fonc)(char*))
35     {
36     affiche=fonc;
37     affichageactif=1;
38     }
39    
40 francois 706 int MGASTER::calcule(char* nomfichierparam,FEM_MAILLAGE* fem,char *nometude,int typeetude,char *code,bool avecenreg)
41 francois 326 {
42 francois 786 bool recures=true;
43 gervaislavoie 382 if (affichageactif==1) affiche((char*)"");
44     if (affichageactif==1) affiche((char*)"*************************");
45     if (affichageactif==1) affiche((char*)" Calcul par code aster");
46     if (affichageactif==1) affiche((char*)"*************************");
47     if (affichageactif==1) affiche((char*)"");
48     if (affichageactif==1) affiche((char*)"");
49     if (affichageactif==1) affiche((char*)"");
50 francois 326 MG_EXPORT exp;
51 francois 706 if (nomfichierparam!=NULL) exp.lire_params_aster(nomfichierparam);
52 francois 581 double version;
53 francois 748 MG_GEOMETRIE* geo=fem->get_mg_maillage()->get_mg_geometrie();
54     char message[500];
55     if ((typeetude == MAGIC::CALCUL_ASTER::ELASTIQUE)) sprintf(message," Calcul elastique sur la geometrie %lu",geo->get_id());
56 francois 786 if ((typeetude == MAGIC::CALCUL_ASTER::RIGIDITE)) {sprintf(message," Calcul de la matrice de rigidite sur la geometrie %lu",geo->get_id());recures=false;}
57 francois 748 if ((typeetude == MAGIC::CALCUL_ASTER::THERMIQUE)) sprintf(message," Calcul thermique sur la geometrie %lu",geo->get_id());
58     if ((typeetude == MAGIC::CALCUL_ASTER::ELASTIQUE_GROT_GDEF)) sprintf(message," Calcul elastique grand deplacement sur la geometrie %lu",geo->get_id());
59     if ((typeetude == MAGIC::CALCUL_ASTER::PLASTIQUE)) sprintf(message," Calcul plastique sur la geometrie %lu",geo->get_id());
60     if ((typeetude == MAGIC::CALCUL_ASTER::CONTRAINTE_PLANE)) sprintf(message," Calcul de contrainte plane sur la geometrie %lu",geo->get_id());
61     if ((typeetude == MAGIC::CALCUL_ASTER::DEFORMATION_PLANE)) sprintf(message," Calcul de deformation plane sur la geometrie %lu",geo->get_id());
62 francois 786 if ((typeetude == MAGIC::CALCUL_ASTER::RIGIDITE_CONTRAINTE_PLANE)) {sprintf(message," Calcul de la matrice de rigidite en contrainte plane sur la geometrie %lu",geo->get_id());;recures=false;}
63     if ((typeetude == MAGIC::CALCUL_ASTER::RIGIDITE_DEFORMATION_PLANE)) {sprintf(message," Calcul de la matrice de rigidite en deformation plane sur la geometrie %lu",geo->get_id());;recures=false;}
64 mejri 888 if ((typeetude == MAGIC::CALCUL_ASTER::ELASTIQUE_NON_LINEAIRE_3D)) sprintf(message," Calcul elastique non lineaire sur la geometrie %lu",geo->get_id());
65 francois 748 if (affichageactif==1) affiche(message);
66     char resultat[10];
67     strcpy(resultat,"00011111");
68     if ((typeetude == MAGIC::CALCUL_ASTER::THERMIQUE)) strcpy(resultat,"");
69     if (code!=NULL) strcpy(resultat,code);
70     version=exp.aster(geo,fem,nometude,typeetude,resultat);
71 francois 757 int base=exp.get_base_aster();
72 francois 748
73 francois 581 if (affichageactif==1)
74     {
75     char messagever[255];
76 francois 691 sprintf(messagever," Calcul aster \033[1;32m%.1lf\033[1;33m ",version);
77 francois 581 affiche(messagever);
78     }
79 couturad 919 char fichier_mess[500];
80     strcpy(fichier_mess,nometude);
81     strcat(fichier_mess,(char*)".mess");
82     bool fichier_mess_existant=false;
83     struct stat t_stat;
84     std::ifstream stream_fichier_mess;
85     stream_fichier_mess.open(fichier_mess, std::ifstream::in);
86     if(stream_fichier_mess.good())
87     {
88     fichier_mess_existant=true;
89     struct stat t_stat;
90     stat(fichier_mess,&t_stat);
91     }
92     else
93     {
94     t_stat.st_ctime=0;
95     }
96 francois 773 MGLANCEURASTER aster;
97 francois 963 int codesortie=aster.execute(param,nometude,version);
98 francois 326 if (codesortie!=0)
99 couturad 919 {
100     if(codesortie==1)
101     {
102     if(fichier_mess_existant)
103     {
104     struct stat t_stat_2;
105     stat(fichier_mess,&t_stat_2);
106     if(t_stat_2.st_ctime<=t_stat.st_ctime)
107     {
108 gervaislavoie 382 return codesortie;
109 couturad 919 }
110     }
111     }
112     else return codesortie;
113 francois 1008 codesortie=0;
114 couturad 919 }
115 francois 1008
116     if (codesortie!=0)
117     {
118     sprintf(message," Code de sortie aster : %d",codesortie);
119     if (affichageactif==1) affiche(message);
120     }
121    
122    
123 francois 786 if (recures)
124 gervaislavoie 382 {
125 francois 786 if (affichageactif==1) affiche((char*)" Recuperation des resultats");
126     char nomfichiertmp[600];
127     MG_IMPORT imp;
128     sprintf(nomfichiertmp,"%s.resu",nometude);
129     std::string res=imp.aster(base,fem,nomfichiertmp,nometude);
130     if (affichageactif==1) printf("%s",(char*)("\033[1;31m"+res+"\033[1;33m").c_str());
131     if (avecenreg==true)
132     {
133 gervaislavoie 382 if (affichageactif==1) affiche((char*)" Enregistrement MAGIC");
134     sprintf(nomfichiertmp,"%s.magic",nometude);
135     fem->get_mg_maillage()->get_gestionnaire()->enregistrer(nomfichiertmp);
136     if (affichageactif==1) affiche((char*)" Enregistrement GMSH");
137     exp.gmsh(fem,nometude);
138     }
139 francois 786 }
140 francois 1008 return codesortie;
141 mejrim 597 }
142 couturad 951 int MGASTER::calcule_fatigue(char* nomfichierparam,FEM_MAILLAGE* fem,char *nometude,int typeetude,std::vector<FEM_ELEMENT3*> *lst,int niveaumax,char *code,bool avecenreg)
143 mejri 932 {
144     bool recures=true;
145     if (affichageactif==1) affiche((char*)"");
146     if (affichageactif==1) affiche((char*)"*************************");
147     if (affichageactif==1) affiche((char*)" Calcul par code aster");
148     if (affichageactif==1) affiche((char*)"*************************");
149     if (affichageactif==1) affiche((char*)"");
150     if (affichageactif==1) affiche((char*)"");
151     if (affichageactif==1) affiche((char*)"");
152     MG_EXPORT exp;
153     if (nomfichierparam!=NULL) exp.lire_params_aster(nomfichierparam);
154     double version;
155     MG_GEOMETRIE* geo=fem->get_mg_maillage()->get_mg_geometrie();
156     char message[500];
157     if ((typeetude == MAGIC::CALCUL_ASTER::ELASTIQUE_NON_LINEAIRE_3D_FATIGUE)) sprintf(message," Calcul de fatigue sur la geometrie %lu",geo->get_id());
158     if (affichageactif==1) affiche(message);
159     char resultat[10];
160     strcpy(resultat,"00011111");
161     if (code!=NULL) strcpy(resultat,code);
162     //version=exp.aster(geo,fem,nometude,typeetude,resultat);
163     version=exp.aster(geo,fem,nometude,typeetude,resultat,0.,niveaumax,lst);
164     int base=exp.get_base_aster();
165    
166     if (affichageactif==1)
167     {
168     char messagever[255];
169     sprintf(messagever," Calcul aster \033[1;32m%.1lf\033[1;33m ",version);
170     affiche(messagever);
171     }
172    
173     MGLANCEURASTER aster;
174 francois 963 int codesortie=aster.execute(param,nometude,version);
175 mejri 932 if (codesortie!=0)
176     {
177     sprintf(message," Code de sortie aster : %d",codesortie);
178     if (affichageactif==1) affiche(message);
179     return codesortie;
180     }
181     if (recures)
182     {
183     if (affichageactif==1) affiche((char*)" Recuperation des resultats");
184     char nomfichiertmp[600];
185     MG_IMPORT imp;
186     sprintf(nomfichiertmp,"%s.resu",nometude);
187     std::string res=imp.aster(base,fem,nomfichiertmp,nometude);
188     if (affichageactif==1) printf("%s",(char*)("\033[1;31m"+res+"\033[1;33m").c_str());
189     if (avecenreg==true)
190     {
191     if (affichageactif==1) affiche((char*)" Enregistrement MAGIC");
192     sprintf(nomfichiertmp,"%s.magic",nometude);
193     fem->get_mg_maillage()->get_gestionnaire()->enregistrer(nomfichiertmp);
194     if (affichageactif==1) affiche((char*)" Enregistrement GMSH");
195     exp.gmsh(fem,nometude);
196     }
197     }
198     }
199 mejrim 597
200    
201 mejri 932
202 francois 725 void MGASTER::ini_param(void)
203     {
204     param.ajouter("Affiche_Code_Aster",0,OT_PARAMETRES::DOUBLE,"0. Affichage redirigé vers le fichier aster.log 1 affichage dans un terminal");
205     char fichier[500];
206     sprintf(fichier,"%s/.magic",getenv("HOME"));
207     param.lire(fichier);
208     param.enregistrer(fichier);
209    
210     }
211 mejrim 597