ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/aster/src/mgaster.cpp
Revision: 1132
Committed: Fri Feb 16 15:46:17 2024 UTC (18 months, 1 week ago) by francois
File size: 7532 byte(s)
Log Message:
parametrage de la boite dans l'homogéinisation
Integration de la version de 15.6 de code aster dans un singularity

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 #include "mglanceuraster.h"
8 #include <sys/stat.h>
9 #include <fstream>
10
11
12
13
14
15
16
17
18 MGASTER::MGASTER():affichageactif(0)
19 {
20 ini_param();
21
22 }
23
24 MGASTER::MGASTER(MGASTER &mdd):affichageactif(mdd.affichageactif)
25 {
26 ini_param();
27 }
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 int MGASTER::calcule(char* nomfichierparam,FEM_MAILLAGE* fem,char *nometude,int typeetude,char *code,bool avecenreg)
41 {
42 bool recures=true;
43 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 MG_EXPORT exp;
51 if (nomfichierparam!=NULL) exp.lire_params_aster(nomfichierparam);
52 double version;
53 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 if ((typeetude == MAGIC::CALCUL_ASTER::RIGIDITE)) {sprintf(message," Calcul de la matrice de rigidite sur la geometrie %lu",geo->get_id());recures=false;}
57 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 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 if ((typeetude == MAGIC::CALCUL_ASTER::ELASTIQUE_NON_LINEAIRE_3D)) sprintf(message," Calcul elastique non lineaire sur la geometrie %lu",geo->get_id());
65 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 int base=exp.get_base_aster();
72
73 if (affichageactif==1)
74 {
75 char messagever[255];
76 sprintf(messagever," Calcul aster \033[1;32m%.1lf\033[1;33m ",version);
77 affiche(messagever);
78 }
79 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 MGLANCEURASTER aster;
97 int codesortie=aster.execute(param,nometude,version);
98 if (codesortie!=0)
99 {
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 return codesortie;
109 }
110 }
111 }
112 else return codesortie;
113 codesortie=0;
114 }
115
116 if (codesortie!=0)
117 {
118 sprintf(message," Code de sortie aster : %d",codesortie);
119 if (affichageactif==1) affiche(message);
120 }
121
122
123 if (recures)
124 {
125 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 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 }
140 return codesortie;
141 }
142 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 {
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 int codesortie=aster.execute(param,nometude,version);
175 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 return 0;
199
200 }
201
202
203
204 void MGASTER::ini_param(void)
205 {
206 param.ajouter("Affiche_Code_Aster",0,OT_PARAMETRES::DOUBLE,"0. Affichage redirigé vers le fichier aster.log 1 affichage dans un terminal");
207 char fichier[500];
208 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)");
209 sprintf(fichier,"%s/.magic",getenv("HOME"));
210 param.lire(fichier);
211 param.enregistrer(fichier);
212
213 }
214