ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/app/calculs/src/main3.cpp
Revision: 946
Committed: Wed Jun 13 22:49:35 2018 UTC (6 years, 11 months ago) by mejri
File size: 8076 byte(s)
Log Message:
Modification du main pour le calcul de l endommagement par fatigue

File Contents

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

Properties

Name Value
svn:executable *