ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/aster/src/mgopt.cpp
Revision: 239
Committed: Sat Mar 13 00:19:11 2010 UTC (15 years, 2 months ago) by francois
Original Path: magic/lib/optimisation/optimisation/src/mgopt.cpp
File size: 3133 byte(s)
Log Message:
Optimisation de topologie integre generique. Version SIMP implemente.
optimisation de code apparu.

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     affiche("Optimisation de topologie");
60     affiche("*************************");
61     affiche("");
62     affiche("");
63     affiche("");
64     affiche("Écriture d'un fichier de parametres par défaut");
65     params.enregistrer(fichier);
66     }
67    
68     void MGOPT::optimise(char *nomgestd,char *nomgestnd,char *nomsortie,char *nomparam)
69     {
70     affiche("");
71     affiche("*************************");
72     affiche("Optimisation de topologie");
73     affiche("*************************");
74     affiche("");
75     affiche("");
76     affiche("");
77     if (nomparam!=NULL) lire_params(nomparam);
78     char *p=strchr(nomgestd,'.');
79     strncpy(nometude,nomgestd,p-nomgestd);
80     nometude[p-nomgestd]=0;
81     affiche("Preparation du modèle");
82     gestd=new MG_FILE(nomgestd);
83     gestnd=new MG_FILE(nomgestnd);
84     unsigned long maille=(unsigned long)params.get_valeur("maille");
85     FEM_MAILLAGE* fem;
86     if (maille==0) fem=prepare_model(gestd,gestnd);
87     else fem=gestd->get_fem_maillageid(maille);
88     affiche("Debut optimisation");
89     optimisation(fem);
90     affiche("Enregistrement resultat");
91     gestd->enregistrer(nomsortie);
92     }
93    
94     FEM_MAILLAGE* MGOPT::prepare_model(MG_GESTIONNAIRE *gestd,MG_GESTIONNAIRE *gestnd)
95     {
96     affiche("Carte de taille");
97     int typecarte=(int)params.get_valeur("typecarte");
98     if (typecarte==0)
99     {
100     affiche(" Calcul");
101     double eng=params.get_valeur("dg");
102     int fechan=(int)params.get_valeur("fechantillonnage");
103     int festim=(int)params.get_valeur("festimation");
104     carte=new FCT_GENERATEUR_CONSTANTE(*gestd,eng);
105     FCT_GENERATEUR_CONSTANTE *carte2=(FCT_GENERATEUR_CONSTANTE*)carte;
106     carte2->construit(fechan,festim);
107     char nomfichiersortie[300];
108     sprintf(nomfichiersortie,"%s.ctt",nometude);
109     carte2->enregistrer(nomfichiersortie);
110     }
111     else
112     {
113     affiche(" Lecture");
114     carte=new FCT_GENERATEUR_3D<4>;
115     std::string fichiercarte=params.get_nom("fichiercarte");
116     carte->lire((char *)fichiercarte.c_str());
117     }
118     affiche("Maillage par le mailleur bloc");
119     FCT_TAILLE* metrique=carte;
120     MAILLEUR_BLOC m(gestd,gestnd,0,0,metrique);
121     m.active_affichage(affiche);
122     m.maille();
123     affiche("Creation du maillage FEM");
124     MG_MAILLAGE* mai=gestd->get_mg_maillage(gestd->get_nb_mg_maillage()-1);
125     int degre=params.get_valeur("degre");
126     FEM_MAILLAGE* fem=new FEM_MAILLAGE(mai->get_mg_geometrie(),mai,degre);
127     gestd->ajouter_fem_maillage(fem);
128     fem->construire(0);
129     return fem;
130     }