ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/optimisation/src/mgopt.cpp
Revision: 240
Committed: Mon Mar 15 18:23:39 2010 UTC (15 years, 2 months ago) by francois
Original Path: magic/lib/optimisation/optimisation/src/mgopt.cpp
File size: 3184 byte(s)
Log Message:
Ajustement de la derniere version en parametrant le chnagement de seuil

File Contents

# User Rev Content
1 francois 239 #include "gestionversion.h"
2     #include "mgopt.h"
3     #include "mg_file.h"
4     #include "fct_generateur_frontiere.h"
5     #include "fct_generateur_constante.h"
6     #include "fct_generateur_fichier.h"
7     #include "mailleur_bloc.h"
8     #include <string.h>
9    
10    
11    
12    
13    
14    
15    
16    
17    
18    
19    
20    
21    
22     MGOPT::MGOPT():gestd(NULL),gestnd(NULL),carte(NULL)
23     {
24     params.ajouter("maille",0.);
25     params.ajouter("dg",7.);
26     params.ajouter("typecarte",1.);
27     params.ajouter("fechantillonnage",20.);
28     params.ajouter("festimation",1.);
29     params.ajouter("fichiercarte","bielle.ctt");
30     params.ajouter("degre",1.);
31     }
32    
33     MGOPT::MGOPT(MGOPT &mdd)
34     {
35     params=mdd.params;
36     }
37    
38    
39     MGOPT::~MGOPT()
40     {
41     if (gestd!=NULL) delete gestd;
42     if (gestd!=NULL) delete gestnd;
43     if (carte!=NULL) delete carte;
44     }
45    
46     void MGOPT::active_affichage(void (*fonc)(char*))
47     {
48     affiche=fonc;
49     affichageactif=1;
50     }
51     void MGOPT::lire_params(char *fichier)
52     {
53     params.vide();
54     params.lire(fichier);
55     }
56    
57     void MGOPT::optimise(char *fichier)
58     {
59 francois 240 affiche("");
60     affiche("*************************");
61 francois 239 affiche("Optimisation de topologie");
62     affiche("*************************");
63     affiche("");
64     affiche("");
65     affiche("");
66     affiche("Écriture d'un fichier de parametres par défaut");
67     params.enregistrer(fichier);
68     }
69    
70     void MGOPT::optimise(char *nomgestd,char *nomgestnd,char *nomsortie,char *nomparam)
71     {
72     affiche("");
73     affiche("*************************");
74     affiche("Optimisation de topologie");
75     affiche("*************************");
76     affiche("");
77     affiche("");
78     affiche("");
79     if (nomparam!=NULL) lire_params(nomparam);
80     char *p=strchr(nomgestd,'.');
81     strncpy(nometude,nomgestd,p-nomgestd);
82     nometude[p-nomgestd]=0;
83     affiche("Preparation du modèle");
84     gestd=new MG_FILE(nomgestd);
85     gestnd=new MG_FILE(nomgestnd);
86     unsigned long maille=(unsigned long)params.get_valeur("maille");
87     FEM_MAILLAGE* fem;
88     if (maille==0) fem=prepare_model(gestd,gestnd);
89     else fem=gestd->get_fem_maillageid(maille);
90     affiche("Debut optimisation");
91     optimisation(fem);
92     affiche("Enregistrement resultat");
93     gestd->enregistrer(nomsortie);
94     }
95    
96     FEM_MAILLAGE* MGOPT::prepare_model(MG_GESTIONNAIRE *gestd,MG_GESTIONNAIRE *gestnd)
97     {
98     affiche("Carte de taille");
99     int typecarte=(int)params.get_valeur("typecarte");
100     if (typecarte==0)
101     {
102     affiche(" Calcul");
103     double eng=params.get_valeur("dg");
104     int fechan=(int)params.get_valeur("fechantillonnage");
105     int festim=(int)params.get_valeur("festimation");
106     carte=new FCT_GENERATEUR_CONSTANTE(*gestd,eng);
107     FCT_GENERATEUR_CONSTANTE *carte2=(FCT_GENERATEUR_CONSTANTE*)carte;
108     carte2->construit(fechan,festim);
109     char nomfichiersortie[300];
110     sprintf(nomfichiersortie,"%s.ctt",nometude);
111     carte2->enregistrer(nomfichiersortie);
112     }
113     else
114     {
115     affiche(" Lecture");
116     carte=new FCT_GENERATEUR_3D<4>;
117     std::string fichiercarte=params.get_nom("fichiercarte");
118     carte->lire((char *)fichiercarte.c_str());
119     }
120     affiche("Maillage par le mailleur bloc");
121     FCT_TAILLE* metrique=carte;
122     MAILLEUR_BLOC m(gestd,gestnd,0,0,metrique);
123     m.active_affichage(affiche);
124     m.maille();
125     affiche("Creation du maillage FEM");
126     MG_MAILLAGE* mai=gestd->get_mg_maillage(gestd->get_nb_mg_maillage()-1);
127     int degre=params.get_valeur("degre");
128     FEM_MAILLAGE* fem=new FEM_MAILLAGE(mai->get_mg_geometrie(),mai,degre);
129     gestd->ajouter_fem_maillage(fem);
130     fem->construire(0);
131     return fem;
132     }