1 |
francois |
1157 |
//####//------------------------------------------------------------ |
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 |
|
|
//####// main3.cpp |
15 |
|
|
//####// |
16 |
|
|
//####//------------------------------------------------------------ |
17 |
|
|
//####//------------------------------------------------------------ |
18 |
|
|
//####// COPYRIGHT 2000-2024 |
19 |
|
|
//####// jeu 13 jun 2024 11:57:20 EDT |
20 |
|
|
//####//------------------------------------------------------------ |
21 |
|
|
//####//------------------------------------------------------------ |
22 |
mejri |
932 |
|
23 |
|
|
|
24 |
|
|
|
25 |
|
|
#include "gestionversion.h" |
26 |
|
|
#include "mg_calcul_fatigue.h" |
27 |
|
|
#include "mg_export.h" |
28 |
|
|
#include "mgaster.h" |
29 |
|
|
#include "mg_definition.h" |
30 |
|
|
#include "mg_gestionnaire.h" |
31 |
|
|
#include "magic_application.h" |
32 |
|
|
#include <string.h> |
33 |
|
|
#include "mg_file.h" |
34 |
couturad |
965 |
#include <math.h> |
35 |
mejri |
932 |
|
36 |
|
|
|
37 |
|
|
int main(int argc,char **argv) |
38 |
|
|
{ |
39 |
|
|
std::vector<MAGIC_PARAMETRE_APPLICATION> lst; |
40 |
|
|
MAGIC_PARAMETRE_APPLICATION p1(2,(char*)"-fatigue",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"modelisation de l endommagement de composite par un essai de fatigue"); |
41 |
|
|
MAGIC_PARAMETRE_APPLICATION p2(3,(char*)"-fichiercalcul",MAGIC_PARAMETRE_APPLICATION::STRING,(char*)"Nom du fichier de parametre de calcul de fatigue"); |
42 |
|
|
MAGIC_PARAMETRE_APPLICATION p3(4,(char*)"-param",MAGIC_PARAMETRE_APPLICATION::STRING,(char*)"Nom du fichier de parametre aster"); |
43 |
|
|
MAGIC_PARAMETRE_APPLICATION p4(5,(char*)"-coderesu",MAGIC_PARAMETRE_APPLICATION::STRING,(char*)"Choix des valeurs à calculer par EF - Defaut 11111111 - |Surface moyenne|Surface inferieure|Surface superieur|Deplacement|Contraintes|Deformations|Contraintes equivalentes|Energie|"); |
44 |
|
|
MAGIC_PARAMETRE_APPLICATION p5(7,(char*)"-gen_fichiercalcul",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Generer un fichier de parametre de calcul de fatigue"); |
45 |
|
|
p1.ajouter_dependance(1);p1.ajouter_dependance(3);p1.ajouter_dependance(4);p1.ajouter_dependance(5); |
46 |
|
|
p5.ajouter_dependance(3); |
47 |
|
|
lst.push_back(p1); |
48 |
|
|
lst.push_back(p2); |
49 |
|
|
lst.push_back(p3); |
50 |
|
|
lst.push_back(p4); |
51 |
|
|
lst.push_back(p5); |
52 |
|
|
MAGIC_APPLICATION app((char*)"Calculs",argc,argv,lst,true,true); |
53 |
|
|
if (app.get_erreur()==true) return 0; |
54 |
|
|
if (app.get_action()==2) |
55 |
|
|
{ |
56 |
|
|
OT_PARAMETRES* params=new OT_PARAMETRES; |
57 |
|
|
char fichier_params[500]; |
58 |
|
|
int Njump,N,nummai; |
59 |
|
|
double penal,max_damage_element; |
60 |
|
|
int numchamps=0; |
61 |
|
|
char coderesu[10]; |
62 |
|
|
FEM_MAILLAGE* mai; |
63 |
|
|
MG_GEOMETRIE *geo; |
64 |
|
|
char nomparam[500]; |
65 |
|
|
char nometude[1000]; |
66 |
|
|
char message[500]; |
67 |
|
|
char message1[500]; |
68 |
|
|
char mess[500]; |
69 |
|
|
char mess1[500]; |
70 |
|
|
char mess2[500]; |
71 |
|
|
char mess3[500]; |
72 |
|
|
char nomfichierout[500]; |
73 |
|
|
char chemin[1000]; |
74 |
|
|
N=1; //initialisation du nombre de cycles |
75 |
|
|
max_damage_element=0.; //initialisation de l'endommagement par element |
76 |
|
|
char fichiermagic[500]; |
77 |
francois |
1051 |
app.recupere_parametre_string(1,fichiermagic,(char*)"Fichier MAGIC entrant manquant",MAGIC_APPLICATION::VERIFFICHIEREXISTE); |
78 |
|
|
app.recupere_parametre_string(3,fichier_params,(char*)"Fichier parametres calcul de fatigue manquant",MAGIC_APPLICATION::VERIFFICHIEREXISTE); |
79 |
|
|
app.recupere_parametre_string(4,nomparam,(char*)"Fichier parametres aster manquant",MAGIC_APPLICATION::VERIFFICHIEREXISTE); |
80 |
mejri |
932 |
app.recupere_parametre_string_avec_defaut(5,coderesu,(char*)"11111111"); |
81 |
|
|
app.recupere_parametre_string_avec_defaut(6,nomfichierout,fichiermagic); |
82 |
|
|
if (app.get_erreur()==true) return 0; |
83 |
|
|
app.affiche((char*)"endommagement par fatigue du composite"); |
84 |
|
|
params->lire(fichier_params); |
85 |
|
|
double Nmax = params->get_valeur((char*)"Nmax"); |
86 |
|
|
double nombreclasse = params->get_valeur((char*)"nombreclasse"); |
87 |
|
|
double valx = params->get_valeur((char*)"valx"); |
88 |
|
|
double valy = params->get_valeur((char*)"valy"); |
89 |
|
|
double valz = params->get_valeur((char*)"valz"); |
90 |
|
|
double nbrniveau = params->get_valeur((char*)"nbrniveau"); |
91 |
|
|
int position = (int)params->get_valeur((char*)"position"); |
92 |
|
|
double valeur_position = params->get_valeur((char*)"valeur_position"); |
93 |
|
|
int nomb_noeud = (int)params->get_valeur((char*)"nomb_noeud"); |
94 |
|
|
delete params; |
95 |
|
|
int niveaumax=(int)nbrniveau; |
96 |
|
|
std::vector<FEM_ELEMENT3*> *lst=new std::vector<FEM_ELEMENT3*>[niveaumax+1]; |
97 |
|
|
MG_FILE gest(fichiermagic); |
98 |
|
|
mai=gest.get_fem_maillage(0); |
99 |
|
|
geo=gest.get_mg_geometrie(0); //parametrer le 0 |
100 |
|
|
int nombre_element=mai->get_nb_fem_element3(); |
101 |
|
|
int nombre_element_case=round(nombre_element/niveaumax); |
102 |
|
|
std::vector<double>tableau_D; |
103 |
|
|
int nombre_Gauss_max=15; |
104 |
|
|
int size=nombre_element*nombre_Gauss_max; |
105 |
|
|
tableau_D.reserve(size); |
106 |
|
|
int j=0; |
107 |
|
|
int i=1; |
108 |
|
|
LISTE_FEM_ELEMENT3::iterator it; |
109 |
|
|
for (FEM_ELEMENT3* ele=mai->get_premier_element3(it);ele!=NULL;ele=mai->get_suivant_element3(it)) |
110 |
|
|
{ |
111 |
|
|
if ((j<=nombre_element_case) && (i<=niveaumax)) |
112 |
|
|
{ |
113 |
|
|
lst[i].push_back(ele); |
114 |
|
|
} |
115 |
|
|
if ((j>nombre_element_case) && (i<niveaumax)) |
116 |
|
|
{ |
117 |
|
|
j=0; |
118 |
|
|
i++; |
119 |
|
|
lst[i].push_back(ele); |
120 |
|
|
} |
121 |
|
|
j++; |
122 |
|
|
} |
123 |
|
|
MG_CALCUL_FATIGUE jump; |
124 |
|
|
MGASTER mgaster; |
125 |
|
|
char *p=strchr(nomfichierout,'.'); |
126 |
|
|
strncpy(nometude,nomfichierout,p-nomfichierout); |
127 |
|
|
nometude[p-nomfichierout]=0; |
128 |
|
|
FILE *strength = NULL; |
129 |
|
|
strength = fopen((char*)"resistancenum.txt", "w"); |
130 |
mejri |
935 |
while((N>0) && (N<=Nmax) && (max_damage_element<=0.99999)) |
131 |
mejri |
932 |
{ |
132 |
|
|
sprintf(mess," Calcul ASTER"); |
133 |
|
|
sprintf(mess1,"le cycle actuellement simulé est %d",N); |
134 |
|
|
app.affiche(mess); |
135 |
|
|
app.affiche(mess1); |
136 |
|
|
mgaster.calcule_fatigue(nomparam,mai,nometude,MAGIC::CALCUL_ASTER::ELASTIQUE_NON_LINEAIRE_3D_FATIGUE,lst,niveaumax,coderesu); |
137 |
|
|
jump.cycle_jump(gest,geo,Njump,nomparam,numchamps,N,niveaumax,fichiermagic,lst,tableau_D,nombreclasse,max_damage_element,strength,valx,valy,valz,fichier_params,position,valeur_position,nomb_noeud); |
138 |
|
|
jump.active_affichage(app.affiche); |
139 |
|
|
sprintf(message,"le nombre de cycles à ne pas prendre en consideration est %d cycles",Njump); |
140 |
|
|
sprintf(mess2,"le cycle prochainement simulé est %d",N+Njump); |
141 |
|
|
sprintf(message1,"l'endommagement maximal par element pour le cycle %d est %lf",N+Njump,max_damage_element); |
142 |
|
|
app.affiche(message); |
143 |
|
|
app.affiche(mess2); |
144 |
|
|
app.affiche(message1); |
145 |
|
|
sprintf(mess3,"Modification de la courbe de traction"); |
146 |
|
|
app.affiche(mess3); |
147 |
|
|
N=N+Njump; |
148 |
mejri |
946 |
if((N>Nmax)&& (max_damage_element<=0.99999)) |
149 |
|
|
{ |
150 |
|
|
sprintf(mess," Calcul ASTER"); |
151 |
|
|
sprintf(mess1,"le cycle actuellement simulé est %d",N); |
152 |
|
|
app.affiche(mess); |
153 |
|
|
app.affiche(mess1); |
154 |
|
|
mgaster.calcule_fatigue(nomparam,mai,nometude,MAGIC::CALCUL_ASTER::ELASTIQUE_NON_LINEAIRE_3D_FATIGUE,lst,niveaumax,coderesu); |
155 |
|
|
jump.cycle_jump(gest,geo,Njump,nomparam,numchamps,N,niveaumax,fichiermagic,lst,tableau_D,nombreclasse,max_damage_element,strength,valx,valy,valz,fichier_params,position,valeur_position,nomb_noeud); |
156 |
|
|
jump.active_affichage(app.affiche); |
157 |
|
|
sprintf(message,"le nombre de cycles à ne pas prendre en consideration est %d cycles",Njump); |
158 |
|
|
sprintf(mess2,"le cycle prochainement simulé est %d",N+Njump); |
159 |
|
|
sprintf(message1,"l'endommagement maximal par element pour le cycle %d est %lf",N+Njump,max_damage_element); |
160 |
|
|
app.affiche(message); |
161 |
|
|
app.affiche(mess2); |
162 |
|
|
app.affiche(message1); |
163 |
mejri |
932 |
} |
164 |
mejri |
946 |
} |
165 |
mejri |
932 |
fclose(strength); |
166 |
|
|
jump.modification_courbe_exp_sidolo(strength); |
167 |
|
|
app.affiche((char*)"Fin"); |
168 |
|
|
} |
169 |
|
|
if (app.get_action()==7) |
170 |
|
|
{ |
171 |
|
|
app.affiche((char*)"Generation d'un fichier de parametres"); |
172 |
|
|
char fichier_params[500]; |
173 |
|
|
app.recupere_parametre_string(3,fichier_params,(char*)"Fichier parametres calcul de fatigue manquant"); |
174 |
|
|
if (app.get_erreur()==true) return 0; |
175 |
|
|
OT_PARAMETRES* params=new OT_PARAMETRES; |
176 |
|
|
MG_CALCUL_FATIGUE magic_calcul_fatigue; |
177 |
|
|
magic_calcul_fatigue.parametres_calcul(params,fichier_params); |
178 |
|
|
params->enregistrer(fichier_params); |
179 |
|
|
delete params; |
180 |
|
|
app.affiche((char*)"Fin"); |
181 |
|
|
} |
182 |
|
|
return 0; |
183 |
|
|
} |
184 |
|
|
|
185 |
|
|
|
186 |
|
|
|
187 |
|
|
#pragma package(smart_init) |