1 |
couturad |
919 |
#include "mstruct_ver.h" |
2 |
|
|
#include "fem_solution.h" |
3 |
|
|
#include "mstruct_ves.h" |
4 |
|
|
#include "mg_gestionnaire.h" |
5 |
|
|
#include "mstruct_outils.h" |
6 |
|
|
#include "mstruct_groupe_forme.h" |
7 |
|
|
#include <vector> |
8 |
|
|
#include <unistd.h> |
9 |
|
|
using namespace MICROSTRUCTURE; |
10 |
|
|
|
11 |
|
|
VER::VER(void) |
12 |
|
|
{ |
13 |
|
|
|
14 |
|
|
} |
15 |
|
|
|
16 |
|
|
VER::~VER(void) |
17 |
|
|
{ |
18 |
|
|
|
19 |
|
|
} |
20 |
|
|
|
21 |
|
|
void VER::active_affichage(MICROSTRUCTURE::fonction_affiche* fonc) |
22 |
|
|
{ |
23 |
|
|
fonc_affiche = fonc; |
24 |
|
|
affichageactif = 1; |
25 |
|
|
} |
26 |
|
|
|
27 |
|
|
void VER::affiche(char* message) |
28 |
|
|
{ |
29 |
|
|
if(affichageactif==1) fonc_affiche(message); |
30 |
|
|
} |
31 |
|
|
|
32 |
|
|
void VER::get_nom_fichier_dossier(string chemin_complet, string& nom_fichier, string& dossier) |
33 |
|
|
{ |
34 |
|
|
std::size_t found = chemin_complet.rfind((char*)"/"); |
35 |
|
|
if (found!=std::string::npos) |
36 |
|
|
{ |
37 |
|
|
dossier=chemin_complet.substr(0,found+1); |
38 |
|
|
nom_fichier=chemin_complet.substr(found+1); |
39 |
|
|
} |
40 |
|
|
else |
41 |
|
|
{ |
42 |
|
|
dossier =""; |
43 |
|
|
nom_fichier=chemin_complet; |
44 |
|
|
} |
45 |
|
|
} |
46 |
|
|
|
47 |
|
|
int VER::homogeneisation(char* fichier_liste_ves, std::vector< OT_PARAMETRES* >& vector_params, char* fichier_resultats) |
48 |
|
|
{ |
49 |
|
|
std::vector<std::string> vector_nom_fichier_ves; |
50 |
|
|
std::ifstream f; |
51 |
|
|
f.open(fichier_liste_ves,ios::in); |
52 |
|
|
char ligne[1000]; |
53 |
|
|
f.getline(ligne,1000); |
54 |
|
|
while(!f.eof()) |
55 |
|
|
{ |
56 |
|
|
char fichier_ves[1000]; |
57 |
|
|
sscanf(ligne,"%s",fichier_ves); |
58 |
|
|
if(strlen(fichier_ves)==0) continue; |
59 |
|
|
std::ifstream test(fichier_ves); |
60 |
|
|
if(!test.good()) |
61 |
|
|
{ |
62 |
|
|
std::cerr << "*** VER::homogeneisation : Erreur lors de l'ouverture du fichier " << fichier_ves << " ***" << std::endl; |
63 |
|
|
return FAIL; |
64 |
|
|
} |
65 |
|
|
test.close(); |
66 |
|
|
vector_nom_fichier_ves.push_back(std::string(fichier_ves)); |
67 |
|
|
f.getline(ligne,1000); |
68 |
|
|
} |
69 |
|
|
f.close(); |
70 |
|
|
std::ofstream o(fichier_resultats,std::ios::out); |
71 |
|
|
o.precision(16); |
72 |
|
|
o << "NB_VES = " << vector_nom_fichier_ves.size() << std::endl; |
73 |
|
|
std::vector<OT_PARAMETRES*>::iterator it_param; |
74 |
|
|
for(it_param=vector_params.begin();it_param!=vector_params.end();it_param++) |
75 |
|
|
{ |
76 |
|
|
OT_PARAMETRES *param=*it_param; |
77 |
|
|
int Moyenne_volumique_champ=(int)param->get_valeur("Moyenne_volumique_champ"); |
78 |
|
|
int Fraction_volumique_CAD = (int)param->get_valeur("Fraction_volumique_CAD"); |
79 |
|
|
int Fraction_volumique_mg_maillage = (int)param->get_valeur("Fraction_volumique_mg_maillage"); |
80 |
|
|
int Fraction_volumique_fem_maillage = (int)param->get_valeur("Fraction_volumique_fem_maillage"); |
81 |
|
|
int Tenseur_orientation = (int)param->get_valeur("Tenseur_orientation"); |
82 |
|
|
int Comparer_champ_theorie = (int)param->get_valeur("Comparer_champ_theorie"); |
83 |
|
|
int Critere_comparaison = (int)param->get_valeur("Critere_comparaison"); |
84 |
|
|
int Num_solution=(int)param->get_valeur("Num_solution"); |
85 |
|
|
std::string Nom_groupe_forme = param->get_nom("Nom_groupe_forme"); |
86 |
|
|
std::string Nom_champ = param->get_nom("Nom_champ"); |
87 |
|
|
int Boite_analyse=(int)param->get_valeur("Boite_analyse"); |
88 |
|
|
double Boite3D_analyse_Xmin = param->get_valeur("Boite3D_analyse_Xmin"); |
89 |
|
|
double Boite3D_analyse_Ymin = param->get_valeur("Boite3D_analyse_Ymin"); |
90 |
|
|
double Boite3D_analyse_Zmin = param->get_valeur("Boite3D_analyse_Zmin"); |
91 |
|
|
double Boite3D_analyse_Xmax = param->get_valeur("Boite3D_analyse_Xmax"); |
92 |
|
|
double Boite3D_analyse_Ymax = param->get_valeur("Boite3D_analyse_Ymax"); |
93 |
|
|
double Boite3D_analyse_Zmax = param->get_valeur("Boite3D_analyse_Zmax"); |
94 |
|
|
int Exporter_liste_resultat = (int)param->get_valeur("Exporter_liste_resultat"); |
95 |
|
|
std::string Fichier_liste_resultat = param->get_nom("Fichier_liste_resultat"); |
96 |
|
|
double Val_champ_theorique[6]; |
97 |
|
|
Val_champ_theorique[0] = param->get_valeur("Val_champ_theorique_XX"); |
98 |
|
|
Val_champ_theorique[1] = param->get_valeur("Val_champ_theorique_YY"); |
99 |
|
|
Val_champ_theorique[2] = param->get_valeur("Val_champ_theorique_ZZ"); |
100 |
|
|
Val_champ_theorique[3] = param->get_valeur("Val_champ_theorique_XY"); |
101 |
|
|
Val_champ_theorique[4] = param->get_valeur("Val_champ_theorique_XZ"); |
102 |
|
|
Val_champ_theorique[5] = param->get_valeur("Val_champ_theorique_YZ"); |
103 |
|
|
if(Moyenne_volumique_champ==1) |
104 |
|
|
{ |
105 |
|
|
BOITE_3D* boite_analyse = NULL; |
106 |
|
|
if(Boite_analyse==1) boite_analyse=new BOITE_3D(Boite3D_analyse_Xmin,Boite3D_analyse_Ymin,Boite3D_analyse_Zmin,Boite3D_analyse_Xmax,Boite3D_analyse_Ymax,Boite3D_analyse_Zmax); |
107 |
|
|
export_moyenne_volumique_champ(Nom_champ,Num_solution,vector_nom_fichier_ves,o,Nom_groupe_forme,boite_analyse,Exporter_liste_resultat,(char*)Fichier_liste_resultat.c_str()); |
108 |
|
|
} |
109 |
|
|
if(Fraction_volumique_CAD==1) |
110 |
|
|
{ |
111 |
|
|
export_fraction_volumique_CAD(vector_nom_fichier_ves,o,Nom_groupe_forme,Exporter_liste_resultat,(char*)Fichier_liste_resultat.c_str()); |
112 |
|
|
} |
113 |
|
|
if(Fraction_volumique_mg_maillage==1) |
114 |
|
|
{ |
115 |
|
|
export_fraction_volumique_mg_maillage(vector_nom_fichier_ves,o,Nom_groupe_forme,Exporter_liste_resultat,(char*)Fichier_liste_resultat.c_str()); |
116 |
|
|
} |
117 |
|
|
if(Fraction_volumique_fem_maillage==1) |
118 |
|
|
{ |
119 |
|
|
BOITE_3D* boite_analyse = NULL; |
120 |
|
|
if(Boite_analyse==1) boite_analyse=new BOITE_3D(Boite3D_analyse_Xmin,Boite3D_analyse_Ymin,Boite3D_analyse_Zmin,Boite3D_analyse_Xmax,Boite3D_analyse_Ymax,Boite3D_analyse_Zmax); |
121 |
|
|
export_fraction_volumique_fem_maillage(vector_nom_fichier_ves,o,Nom_groupe_forme,boite_analyse,Exporter_liste_resultat,(char*)Fichier_liste_resultat.c_str()); |
122 |
|
|
} |
123 |
|
|
if(Tenseur_orientation==1) |
124 |
|
|
{ |
125 |
|
|
export_tenseur_orientation(vector_nom_fichier_ves,o,Nom_groupe_forme,Exporter_liste_resultat,(char*)Fichier_liste_resultat.c_str()); |
126 |
|
|
} |
127 |
|
|
} |
128 |
|
|
o.close(); |
129 |
|
|
} |
130 |
|
|
|
131 |
|
|
|
132 |
|
|
int VER::export_moyenne_volumique_champ(std::string nom_champ, |
133 |
|
|
int num_solution, |
134 |
|
|
std::vector<std::string> &vector_nom_fichier_ves, |
135 |
|
|
std::ostream& o, |
136 |
|
|
std::string nom_groupe_forme, |
137 |
|
|
BOITE_3D* boite_analyse, |
138 |
|
|
int liste_resultat, |
139 |
|
|
char* fichier_liste_resultat) |
140 |
|
|
{ |
141 |
|
|
char message[1000]; |
142 |
|
|
sprintf(message,"MOYENNE VOLUMIQUE CHAMP : CHAMP = %s",nom_champ.c_str()); |
143 |
|
|
affiche(message); |
144 |
|
|
if(nom_groupe_forme!="NULL") |
145 |
|
|
{ |
146 |
|
|
sprintf(message,"Groupe forme : %s",nom_groupe_forme.c_str()); |
147 |
|
|
affiche(message); |
148 |
|
|
} |
149 |
|
|
if(boite_analyse!=NULL) |
150 |
|
|
{ |
151 |
|
|
sprintf(message,"Boite_3D analyse : [%lf,%lf,%lf,%lf,%lf,%lf]",boite_analyse->get_xmin(), |
152 |
|
|
boite_analyse->get_ymin(), |
153 |
|
|
boite_analyse->get_zmin(), |
154 |
|
|
boite_analyse->get_xmax(), |
155 |
|
|
boite_analyse->get_ymax(), |
156 |
|
|
boite_analyse->get_zmax()); |
157 |
|
|
affiche(message); |
158 |
|
|
} |
159 |
|
|
FEM_SOLUTION *sol=NULL; |
160 |
|
|
GROUPE_FORME* groupe_forme=NULL; |
161 |
|
|
int dim_champ=0; |
162 |
|
|
long nb_ves=0; |
163 |
|
|
std::vector<double*> vector_champ_ves; |
164 |
|
|
std::vector<std::string>::iterator it_fichier_ves; |
165 |
|
|
for(it_fichier_ves=vector_nom_fichier_ves.begin();it_fichier_ves!=vector_nom_fichier_ves.end();it_fichier_ves++) |
166 |
|
|
{ |
167 |
|
|
std::string chemin_complet_fichier_ves=*it_fichier_ves; |
168 |
|
|
char chr_pwd[2000]; |
169 |
|
|
getcwd(chr_pwd,2000); |
170 |
|
|
std::string pwd = chr_pwd; |
171 |
|
|
std::string fichier_ves; |
172 |
|
|
std::string dossier; |
173 |
|
|
get_nom_fichier_dossier(chemin_complet_fichier_ves,fichier_ves,dossier); |
174 |
|
|
chdir(dossier.c_str()); |
175 |
|
|
VES ves((char*)fichier_ves.c_str()); |
176 |
|
|
nb_ves++; |
177 |
|
|
sprintf(message," -> VES #%li : dossier[%s] fichier[%s]",nb_ves,dossier.c_str(),fichier_ves.c_str()); |
178 |
|
|
affiche(message); |
179 |
|
|
if(nom_groupe_forme!="NULL")groupe_forme=ves.get_groupe_forme(nom_groupe_forme); |
180 |
|
|
sol=ves.get_mg_gestionnaire()->get_fem_solution(num_solution); |
181 |
|
|
dim_champ=sol->get_nb_champ(); |
182 |
|
|
double* champ=new double[dim_champ]; |
183 |
|
|
MICROSTRUCTURE::OUTILS::moyenne_volumique_champ(sol,champ,groupe_forme,boite_analyse); |
184 |
|
|
vector_champ_ves.push_back(champ); |
185 |
|
|
chdir(pwd.c_str()); |
186 |
|
|
} |
187 |
|
|
affiche((char*)" -> FIN"); |
188 |
|
|
if(liste_resultat) export_liste_resultat(fichier_liste_resultat,dim_champ,vector_champ_ves,std::string("// " + nom_champ)); |
189 |
|
|
double moyenne[dim_champ]; |
190 |
|
|
double ecart_type[dim_champ]; |
191 |
|
|
double min[dim_champ]; |
192 |
|
|
double max[dim_champ]; |
193 |
|
|
MICROSTRUCTURE::OUTILS::moyenne_ecart_type(dim_champ,vector_champ_ves,moyenne,ecart_type,min,max); |
194 |
|
|
std::vector<double*>::iterator it; |
195 |
|
|
for(it=vector_champ_ves.begin();it!=vector_champ_ves.end();it++) delete *it; |
196 |
|
|
o << "MOYENNE VOLUMIQUE CHAMP : CHAMP = " << nom_champ << std::endl; |
197 |
|
|
if(groupe_forme!=NULL) o << " GROUPE_FORME = " << nom_groupe_forme << std::endl; |
198 |
|
|
if(boite_analyse!=NULL) o << " BOITE_3D_ANALYSE = " << boite_analyse->get_xmin() << " " |
199 |
|
|
<< boite_analyse->get_ymin() << " " |
200 |
|
|
<< boite_analyse->get_zmin() << " " |
201 |
|
|
<< boite_analyse->get_xmax() << " " |
202 |
|
|
<< boite_analyse->get_ymax() << " " |
203 |
|
|
<< boite_analyse->get_zmax() << std::endl; |
204 |
|
|
o << " DIM_CHAMP = " << dim_champ << std::endl; |
205 |
|
|
for(int i=0;i<dim_champ;i++) o << " " << nom_champ << "[" << i << "] = " << moyenne[i] << " ± " << ecart_type[i] << " " << min[i] << " " << max[i] << std::endl; |
206 |
|
|
o << std::endl; |
207 |
|
|
return OK; |
208 |
|
|
} |
209 |
|
|
|
210 |
|
|
int VER::export_fraction_volumique_CAD(vector< string >& vector_nom_fichier_ves, |
211 |
|
|
ostream& o, |
212 |
|
|
string nom_groupe_forme, |
213 |
|
|
int liste_resultat, |
214 |
|
|
char* fichier_liste_resultat) |
215 |
|
|
{ |
216 |
|
|
char message[1000]; |
217 |
|
|
sprintf(message,"FRACTION VOLUMIQUE CAD"); |
218 |
|
|
affiche(message); |
219 |
|
|
if(nom_groupe_forme!="NULL") |
220 |
|
|
{ |
221 |
|
|
sprintf(message,"Groupe forme : %s",nom_groupe_forme.c_str()); |
222 |
|
|
affiche(message); |
223 |
|
|
} |
224 |
|
|
GROUPE_FORME* groupe_forme=NULL; |
225 |
|
|
long nb_ves=0; |
226 |
|
|
std::vector<double*> vector_volume_frac_vol; |
227 |
|
|
std::vector<std::string>::iterator it_fichier_ves; |
228 |
|
|
for(it_fichier_ves=vector_nom_fichier_ves.begin();it_fichier_ves!=vector_nom_fichier_ves.end();it_fichier_ves++) |
229 |
|
|
{ |
230 |
|
|
std::string chemin_complet_fichier_ves=*it_fichier_ves; |
231 |
|
|
char chr_pwd[2000]; |
232 |
|
|
getcwd(chr_pwd,2000); |
233 |
|
|
std::string pwd = chr_pwd; |
234 |
|
|
std::string fichier_ves; |
235 |
|
|
std::string dossier; |
236 |
|
|
get_nom_fichier_dossier(chemin_complet_fichier_ves,fichier_ves,dossier); |
237 |
|
|
chdir(dossier.c_str()); |
238 |
|
|
VES ves((char*)fichier_ves.c_str()); |
239 |
|
|
nb_ves++; |
240 |
|
|
sprintf(message," -> VES #%li : dossier[%s] fichier[%s]",nb_ves,dossier.c_str(),fichier_ves.c_str()); |
241 |
|
|
affiche(message); |
242 |
|
|
if(nom_groupe_forme!="NULL")groupe_forme=ves.get_groupe_forme(nom_groupe_forme); |
243 |
|
|
double *vol_fracvol = new double[2]; |
244 |
|
|
MICROSTRUCTURE::OUTILS::fraction_volumique_CAD(&ves,groupe_forme,vol_fracvol[0],vol_fracvol[1]); |
245 |
|
|
vector_volume_frac_vol.push_back(vol_fracvol); |
246 |
|
|
chdir(pwd.c_str()); |
247 |
|
|
} |
248 |
|
|
affiche((char*)" -> FIN"); |
249 |
|
|
if(liste_resultat) export_liste_resultat(fichier_liste_resultat,2,vector_volume_frac_vol,std::string("// FRACTION_VOLUMIQUE_CAD")); |
250 |
|
|
double moyenne[2]; |
251 |
|
|
double ecart_type[2]; |
252 |
|
|
double min[2]; |
253 |
|
|
double max[2]; |
254 |
|
|
MICROSTRUCTURE::OUTILS::moyenne_ecart_type(2,vector_volume_frac_vol,moyenne,ecart_type,min,max); |
255 |
|
|
std::vector<double*>::iterator it; |
256 |
|
|
for(it=vector_volume_frac_vol.begin();it!=vector_volume_frac_vol.end();it++) delete *it; |
257 |
|
|
o << "FRACTION VOLUMIQUE CAD" << std::endl; |
258 |
|
|
if(groupe_forme!=NULL) o << " GROUPE_FORME = " << nom_groupe_forme << std::endl; |
259 |
|
|
o << " Volume = " << moyenne[0] << " ± " << ecart_type[0] << " " << min[0] << " " << max[0] << std::endl; |
260 |
|
|
o << " Fraction_volumique = " << moyenne[1] << " ± " << ecart_type[1] << " " << min[1] << " " << max[1] << std::endl; |
261 |
|
|
o << std::endl; |
262 |
|
|
return OK; |
263 |
|
|
} |
264 |
|
|
|
265 |
|
|
int VER::export_fraction_volumique_mg_maillage(vector< string >& vector_nom_fichier_ves, |
266 |
|
|
ostream& o, |
267 |
|
|
string nom_groupe_forme, |
268 |
|
|
int liste_resultat, |
269 |
|
|
char* fichier_liste_resultat) |
270 |
|
|
{ |
271 |
|
|
char message[1000]; |
272 |
|
|
sprintf(message,"FRACTION VOLUMIQUE MG_MAILLAGE"); |
273 |
|
|
affiche(message); |
274 |
|
|
if(nom_groupe_forme!="NULL") |
275 |
|
|
{ |
276 |
|
|
sprintf(message,"Groupe forme : %s",nom_groupe_forme.c_str()); |
277 |
|
|
affiche(message); |
278 |
|
|
} |
279 |
|
|
GROUPE_FORME* groupe_forme=NULL; |
280 |
|
|
long nb_ves=0; |
281 |
|
|
std::vector<double*> vector_volume_frac_vol; |
282 |
|
|
std::vector<std::string>::iterator it_fichier_ves; |
283 |
|
|
for(it_fichier_ves=vector_nom_fichier_ves.begin();it_fichier_ves!=vector_nom_fichier_ves.end();it_fichier_ves++) |
284 |
|
|
{ |
285 |
|
|
std::string chemin_complet_fichier_ves=*it_fichier_ves; |
286 |
|
|
char chr_pwd[2000]; |
287 |
|
|
getcwd(chr_pwd,2000); |
288 |
|
|
std::string pwd = chr_pwd; |
289 |
|
|
std::string fichier_ves; |
290 |
|
|
std::string dossier; |
291 |
|
|
get_nom_fichier_dossier(chemin_complet_fichier_ves,fichier_ves,dossier); |
292 |
|
|
chdir(dossier.c_str()); |
293 |
|
|
VES ves((char*)fichier_ves.c_str()); |
294 |
|
|
nb_ves++; |
295 |
|
|
sprintf(message," -> VES #%li : dossier[%s] fichier[%s]",nb_ves,dossier.c_str(),fichier_ves.c_str()); |
296 |
|
|
affiche(message); |
297 |
|
|
if(nom_groupe_forme!="NULL")groupe_forme=ves.get_groupe_forme(nom_groupe_forme); |
298 |
|
|
double *vol_fracvol = new double[2]; |
299 |
|
|
MICROSTRUCTURE::OUTILS::fraction_volumique_mg_maillage(&ves,groupe_forme,vol_fracvol[0],vol_fracvol[1]); |
300 |
|
|
vector_volume_frac_vol.push_back(vol_fracvol); |
301 |
|
|
chdir(pwd.c_str()); |
302 |
|
|
} |
303 |
|
|
affiche((char*)" -> FIN"); |
304 |
|
|
if(liste_resultat) export_liste_resultat(fichier_liste_resultat,2,vector_volume_frac_vol,std::string("// FRACTION_VOLUMIQUE_MG_MAILLAGE")); |
305 |
|
|
double moyenne[2]; |
306 |
|
|
double ecart_type[2]; |
307 |
|
|
double min[2]; |
308 |
|
|
double max[2]; |
309 |
|
|
MICROSTRUCTURE::OUTILS::moyenne_ecart_type(2,vector_volume_frac_vol,moyenne,ecart_type,min,max); |
310 |
|
|
std::vector<double*>::iterator it; |
311 |
|
|
for(it=vector_volume_frac_vol.begin();it!=vector_volume_frac_vol.end();it++) delete *it; |
312 |
|
|
o << "FRACTION VOLUMIQUE MG_MAILLAGE" << std::endl; |
313 |
|
|
if(groupe_forme!=NULL) o << " GROUPE_FORME = " << nom_groupe_forme << std::endl; |
314 |
|
|
o << " Volume = " << moyenne[0] << " ± " << ecart_type[0] << " " << min[0] << " " << max[0] << std::endl; |
315 |
|
|
o << " Fraction_volumique = " << moyenne[1] << " ± " << ecart_type[1] << " " << min[1] << " " << max[1] << std::endl; |
316 |
|
|
o << std::endl; |
317 |
|
|
return OK; |
318 |
|
|
} |
319 |
|
|
|
320 |
|
|
int VER::export_fraction_volumique_fem_maillage(vector< string >& vector_nom_fichier_ves, |
321 |
|
|
ostream& o, |
322 |
|
|
string nom_groupe_forme, |
323 |
|
|
BOITE_3D *boite_analyse, |
324 |
|
|
int liste_resultat, |
325 |
|
|
char* fichier_liste_resultat) |
326 |
|
|
{ |
327 |
|
|
char message[1000]; |
328 |
|
|
sprintf(message,"FRACTION VOLUMIQUE FEM_MAILLAGE"); |
329 |
|
|
affiche(message); |
330 |
|
|
if(nom_groupe_forme!="NULL") |
331 |
|
|
{ |
332 |
|
|
sprintf(message,"Groupe forme : %s",nom_groupe_forme.c_str()); |
333 |
|
|
affiche(message); |
334 |
|
|
} |
335 |
|
|
if(boite_analyse!=NULL) |
336 |
|
|
{ |
337 |
|
|
sprintf(message,"Boite_3D analyse : [%lf,%lf,%lf,%lf,%lf,%lf]",boite_analyse->get_xmin(), |
338 |
|
|
boite_analyse->get_ymin(), |
339 |
|
|
boite_analyse->get_zmin(), |
340 |
|
|
boite_analyse->get_xmax(), |
341 |
|
|
boite_analyse->get_ymax(), |
342 |
|
|
boite_analyse->get_zmax()); |
343 |
|
|
affiche(message); |
344 |
|
|
} |
345 |
|
|
GROUPE_FORME* groupe_forme=NULL; |
346 |
|
|
long nb_ves=0; |
347 |
|
|
std::vector<double*> vector_volume_frac_vol; |
348 |
|
|
std::vector<std::string>::iterator it_fichier_ves; |
349 |
|
|
for(it_fichier_ves=vector_nom_fichier_ves.begin();it_fichier_ves!=vector_nom_fichier_ves.end();it_fichier_ves++) |
350 |
|
|
{ |
351 |
|
|
std::string chemin_complet_fichier_ves=*it_fichier_ves; |
352 |
|
|
char chr_pwd[2000]; |
353 |
|
|
getcwd(chr_pwd,2000); |
354 |
|
|
std::string pwd = chr_pwd; |
355 |
|
|
std::string fichier_ves; |
356 |
|
|
std::string dossier; |
357 |
|
|
get_nom_fichier_dossier(chemin_complet_fichier_ves,fichier_ves,dossier); |
358 |
|
|
chdir(dossier.c_str()); |
359 |
|
|
VES ves((char*)fichier_ves.c_str()); |
360 |
|
|
nb_ves++; |
361 |
|
|
sprintf(message," -> VES #%li : dossier[%s] fichier[%s]",nb_ves,dossier.c_str(),fichier_ves.c_str()); |
362 |
|
|
affiche(message); |
363 |
|
|
if(nom_groupe_forme!="NULL")groupe_forme=ves.get_groupe_forme(nom_groupe_forme); |
364 |
|
|
double *vol_fracvol = new double[2]; |
365 |
|
|
MICROSTRUCTURE::OUTILS::fraction_volumique_fem_maillage(&ves,groupe_forme,vol_fracvol[0],vol_fracvol[1],boite_analyse); |
366 |
|
|
vector_volume_frac_vol.push_back(vol_fracvol); |
367 |
|
|
chdir(pwd.c_str()); |
368 |
|
|
} |
369 |
|
|
affiche((char*)" -> FIN"); |
370 |
|
|
if(liste_resultat) export_liste_resultat(fichier_liste_resultat,2,vector_volume_frac_vol,std::string("// FRACTION_VOLUMIQUE_FEM_MAILLAGE")); |
371 |
|
|
double moyenne[2]; |
372 |
|
|
double ecart_type[2]; |
373 |
|
|
double min[2]; |
374 |
|
|
double max[2]; |
375 |
|
|
MICROSTRUCTURE::OUTILS::moyenne_ecart_type(2,vector_volume_frac_vol,moyenne,ecart_type,min,max); |
376 |
|
|
std::vector<double*>::iterator it; |
377 |
|
|
for(it=vector_volume_frac_vol.begin();it!=vector_volume_frac_vol.end();it++) delete *it; |
378 |
|
|
o << "FRACTION VOLUMIQUE FEM_MAILLAGE" << std::endl; |
379 |
|
|
if(groupe_forme!=NULL) o << " GROUPE_FORME = " << nom_groupe_forme << std::endl; |
380 |
|
|
if(boite_analyse!=NULL) o << " BOITE_3D_ANALYSE = " << boite_analyse->get_xmin() << " " |
381 |
|
|
<< boite_analyse->get_ymin() << " " |
382 |
|
|
<< boite_analyse->get_zmin() << " " |
383 |
|
|
<< boite_analyse->get_xmax() << " " |
384 |
|
|
<< boite_analyse->get_ymax() << " " |
385 |
|
|
<< boite_analyse->get_zmax() << std::endl; |
386 |
|
|
o << " Volume = " << moyenne[0] << " ± " << ecart_type[0] << " " << min[0] << " " << max[0] << std::endl; |
387 |
|
|
o << " Fraction_volumique = " << moyenne[1] << " ± " << ecart_type[1] << " " << min[1] << " " << max[1] << std::endl; |
388 |
|
|
o << std::endl; |
389 |
|
|
return OK; |
390 |
|
|
} |
391 |
|
|
|
392 |
|
|
int VER::export_tenseur_orientation(vector< string >& vector_nom_fichier_ves, |
393 |
|
|
ostream& o, |
394 |
|
|
string nom_groupe_forme, |
395 |
|
|
int liste_resultat, |
396 |
|
|
char* fichier_liste_resultat) |
397 |
|
|
{ |
398 |
|
|
char message[1000]; |
399 |
|
|
sprintf(message,"TENSEUR ORIENTATION"); |
400 |
|
|
affiche(message); |
401 |
|
|
if(nom_groupe_forme=="NULL") |
402 |
|
|
{ |
403 |
|
|
sprintf(message,"*** VER::export_tenseur_orientation ERREUR Groupe forme : %s ***",nom_groupe_forme.c_str()); |
404 |
|
|
affiche(message); |
405 |
|
|
return FAIL; |
406 |
|
|
} |
407 |
|
|
GROUPE_FORME* groupe_forme=NULL; |
408 |
|
|
long nb_ves=0; |
409 |
|
|
std::vector<double*> vector_tenseur_ori; |
410 |
|
|
std::vector<std::string>::iterator it_fichier_ves; |
411 |
|
|
for(it_fichier_ves=vector_nom_fichier_ves.begin();it_fichier_ves!=vector_nom_fichier_ves.end();it_fichier_ves++) |
412 |
|
|
{ |
413 |
|
|
std::string chemin_complet_fichier_ves=*it_fichier_ves; |
414 |
|
|
char chr_pwd[2000]; |
415 |
|
|
getcwd(chr_pwd,2000); |
416 |
|
|
std::string pwd = chr_pwd; |
417 |
|
|
std::string fichier_ves; |
418 |
|
|
std::string dossier; |
419 |
|
|
get_nom_fichier_dossier(chemin_complet_fichier_ves,fichier_ves,dossier); |
420 |
|
|
chdir(dossier.c_str()); |
421 |
|
|
VES ves((char*)fichier_ves.c_str()); |
422 |
|
|
nb_ves++; |
423 |
|
|
sprintf(message," -> VES #%li : dossier[%s] fichier[%s]",nb_ves,dossier.c_str(),fichier_ves.c_str()); |
424 |
|
|
affiche(message); |
425 |
|
|
groupe_forme=ves.get_groupe_forme(nom_groupe_forme); |
426 |
|
|
double *a2=new double[6]; |
427 |
|
|
MICROSTRUCTURE::OUTILS::tenseur_orientation(groupe_forme,a2); |
428 |
|
|
vector_tenseur_ori.push_back(a2); |
429 |
|
|
chdir(pwd.c_str()); |
430 |
|
|
} |
431 |
|
|
affiche((char*)" -> FIN"); |
432 |
|
|
if(liste_resultat) export_liste_resultat(fichier_liste_resultat,2,vector_tenseur_ori,std::string("// TENSEUR_ORIENTATION_A2")); |
433 |
|
|
double moyenne[6]; |
434 |
|
|
double ecart_type[6]; |
435 |
|
|
double min[6]; |
436 |
|
|
double max[6]; |
437 |
|
|
MICROSTRUCTURE::OUTILS::moyenne_ecart_type(6,vector_tenseur_ori,moyenne,ecart_type,min,max); |
438 |
|
|
std::vector<double*>::iterator it; |
439 |
|
|
for(it=vector_tenseur_ori.begin();it!=vector_tenseur_ori.end();it++) delete *it; |
440 |
|
|
o << "TENSEUR ORIENTATION" << std::endl; |
441 |
|
|
o << " GROUPE_FORME = " << nom_groupe_forme << std::endl; |
442 |
|
|
for(int i=0;i<6;i++) o << " a2[" << i << "] = " << moyenne[i] << " ± " << ecart_type[i] << " " << min[i] << " " << max[i] << std::endl; |
443 |
|
|
o << std::endl; |
444 |
|
|
return OK; |
445 |
|
|
} |
446 |
|
|
|
447 |
|
|
int VER::export_liste_resultat(char* fichier, int dim_champ, std::vector< double* >& vector_champ, std::string description) |
448 |
|
|
{ |
449 |
|
|
std::ofstream o(fichier,std::ios::out); |
450 |
|
|
o.precision(16); |
451 |
|
|
o << description << std::endl; |
452 |
|
|
long k=0; |
453 |
|
|
std::vector<double*>::iterator it; |
454 |
|
|
for(it=vector_champ.begin();it!=vector_champ.end();it++) |
455 |
|
|
{ |
456 |
|
|
o << k << " "; |
457 |
|
|
double *tab = *it; |
458 |
|
|
for(int i=0;i<dim_champ;i++) |
459 |
|
|
{ |
460 |
|
|
o << tab[i] << " "; |
461 |
|
|
} |
462 |
|
|
o << std::endl; |
463 |
|
|
k++; |
464 |
|
|
} |
465 |
|
|
o.close(); |
466 |
|
|
} |
467 |
|
|
|
468 |
|
|
int VER::compare_champ_theorie(std::vector< double* >& vector_champ, |
469 |
|
|
int dim_champ, |
470 |
|
|
double* val_theorique_champ, |
471 |
|
|
ostream& o, |
472 |
|
|
string nom_groupe_forme, |
473 |
|
|
int liste_resultat, |
474 |
|
|
char* fichier_liste_resultat, |
475 |
|
|
int intervalles) |
476 |
|
|
{ |
477 |
|
|
|
478 |
|
|
} |
479 |
|
|
|
480 |
|
|
|
481 |
|
|
|