ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/app/calculs/src/main3.cpp
Revision: 1157
Committed: Thu Jun 13 22:18:27 2024 UTC (15 months, 2 weeks ago) by francois
File size: 8139 byte(s)
Log Message:
compatibilité Ubuntu 22.04
Suppression des refeences à Windows
Ajout d'une banière

File Contents

# User Rev Content
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)

Properties

Name Value
svn:executable *