ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/aster/src/mgaster.cpp
Revision: 1158
Committed: Thu Jun 13 22:18:49 2024 UTC (11 months ago) by francois
File size: 8546 byte(s)
Log Message:
compatibilité Ubuntu 22.04
Suppression des refeences à Windows
Ajout d'une banière

File Contents

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