ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/optimisation/src/optimisation_topo.cpp
(Generate patch)

Comparing optimisation/src/optimisation_topo.cpp (file contents):
Revision 218 by picher, Tue Nov 10 19:01:30 2009 UTC vs.
Revision 235 by picher, Wed Mar 3 14:42:23 2010 UTC

# Line 69 | Line 69 | int main(int argc, char **argv )
69    ulong j                  ;
70    ulong l                  ;
71    ulong iter = 1           ;
72  ulong iter_max = 50      ;         //On sp�cifit le nombre d'it�ration maximum permit (par défaut 50)
72    ulong _type              ;         //Entier correspondant au type d'�l�ment
73    ulong fic_size1;
74    ulong fic_size2;
75    ulong fic_size3;
76    ulong fic_size4;
77  
78 <  vifl l1; vifl l2           ;          //Variables pour la dichotomie
80 <  vifl m= 0.18; vifl lmid    ;
78 >  vifl l1; vifl l2; vifl lmid;  //Variables pour la dichotomie
79    vifl critere_densite = 0.0 ;
80 <  vifl E = 210e9             ;          //module de young (par d�faut acier)
81 <  vifl nu = 0.3              ;          //coefficient de poisson (par d�faut acier)
82 <  vifl rho = 7850.           ;          //masse volumique (par d�faut acier)
83 <  vifl Vx = 0.               ;          //volume de mati�re � optimiser (design)
84 <  vifl V1 = 0.               ;          //volume de mati�re fixe (non-design)
87 <  vifl frac_vol = 0.6        ;          //fraction volumique de la zone active (valeur par défaut)
88 <  vifl penal = 3.0           ;          //coefficient de p�nalisation (par défaut 3)
89 <  vifl k = 3.0               ;          //Coefficient k pour le calcul des poids Hv
90 <  vifl niveau = 150.         ;          //Nombre de niveaux de densit�s (par défaut 150)
91 <  vifl change = 1.           ;
92 <  vifl seuil = 0.8           ;          //Seuil pour la visualisation des éléments conservés (0.8 par défaut)
93 <  vifl densite_min = 1e-3    ;          //Densit� minimale de 0.001
80 >  vifl E = 210e9             ;  //module de young (par defaut acier)
81 >  vifl nu = 0.3              ;  //coefficient de poisson (par defaut acier)
82 >  vifl rho = 7850.           ;  //masse volumique (par defaut acier)
83 >  vifl Vx = 0.               ;  //volume de matiere fixe optimiser (design)
84 >  vifl V1 = 0.               ;  //volume de matiere fixe (non-design)
85    vifl densite_max = 1.0     ;
86 +  vifl change = 1.           ;
87    vifl m_item                ;
88    vifl _volume               ;
89    vifl m_distance            ;
90 <  vifl **m_V_distance        ;          //Tableau de pointeur vers les distances aux voisins de chaque éléments
90 >  vifl **m_V_distance        ;  //Tableau de pointeur vers les distances aux voisins de chaque elements
91    vifl x1                    ;
92    vifl x2                    ;
93    vifl x3                    ;
# Line 107 | Line 99 | int main(int argc, char **argv )
99  
100    ty_RSLT m_design           ;
101  
102 +  ulong iter_max = 50           ;       //Nombre d'iteration maximum permit
103 +  vifl critere_convergence = 0.1;       //Critère de convergence par défaut
104 +  vifl coeff_voisins = 2.5      ;       //Valeur par défaut du coefficient multipliant pour le calcul des voisins
105 +  vifl m = 0.2                  ;       //Limite supérieure m pour la dichotomie
106 +  vifl frac_vol = 0.6           ;       //fraction volumique de la zone active f
107 +  vifl penal = 3.0              ;       //coefficient de penalisation p
108 +  vifl k = 3.0                  ;       //Coefficient k pour le calcul des poids Hv
109 +  vifl niveau = 150.            ;       //Nombre de niveaux de densites
110 +  vifl seuil = 0.8              ;       //Seuil pour la visualisation des éléments conservés
111 +  vifl densite_min = 1e-3       ;       //Densite minimale (par défaut 0.001)
112  
113 <
112 <  //Acquisition des param�tres de l'�tude
113 >  //Acquisition des parametres de l'etude
114    for (int i=0;i<argc;i++)
115            {
116            if (strcmp(argv[i],"-fichier")==0) strcpy(m_nom_fic_parametre,argv[i+1]);
# Line 118 | Line 119 | int main(int argc, char **argv )
119            if (strcmp(argv[i],"-niveau")==0) niveau=atof(argv[i+1]);
120            if (strcmp(argv[i],"-nbiter")==0) iter_max=atoi(argv[i+1]);
121            if (strcmp(argv[i],"-seuil")==0) seuil=atoi(argv[i+1]);
122 +          if (strcmp(argv[i],"-k")==0) k=atof(argv[i+1]);
123 +          if (strcmp(argv[i],"-rhomin")==0) densite_min=atof(argv[i+1]);
124 +          if (strcmp(argv[i],"-coeffvoisins")==0) coeff_voisins=atof(argv[i+1]);
125 +          if (strcmp(argv[i],"-critere")==0) critere_convergence=atof(argv[i+1]);
126 +          if (strcmp(argv[i],"-m")==0) m=atof(argv[i+1]);
127            }
128    FILE* parametres=fopen(m_nom_fic_parametre,"rt");
129    char message[100];
# Line 294 | Line 300 | int main(int argc, char **argv )
300    //Allocation de la m�moire n�cessaire dans les tableaux
301    ulong *compteur = (ulong*) malloc (sizeof(ulong)*(_dernier_element+1))  ;
302    vifl *densite = (vifl*) malloc (sizeof(vifl)*(_dernier_element+1))      ;     //vecteur des variables densit�s pour chaque �l�ment
303 <  ulong *densite_active = (ulong*) malloc (sizeof(ulong)*(_dernier_element+1));  //vecteur qui d�termine si la densit� est active
303 >  ulong *densite_active = (ulong*) malloc (sizeof(ulong)*(_dernier_element+1)); //vecteur qui d�termine si la densit� est active
304    vifl *densite_new = (vifl*) malloc (sizeof(vifl)*(_dernier_element+1))  ;     //vecteur des variables densit�s pour la nouvelle it�ration
305    vifl *volume = (vifl*) malloc (sizeof(vifl)*(_dernier_element+1))       ;     //vecteur des volumes pour chaque �l�ment
306    vifl *Denergie = (vifl*) malloc (sizeof(vifl)*(_dernier_element+1))     ;
# Line 315 | Line 321 | int main(int argc, char **argv )
321          compteur[i] = 1;
322          maille_niveau[i]=0.;
323          }
324 <
324 >  vifl volume_total = 0.;
325    //Calcul du volume de design et du volume total du maillage 3D
326    for (i=_premier_element;i<=_dernier_element;i++)
327          {
# Line 333 | Line 339 | int main(int argc, char **argv )
339                  densite[i] = 1.;
340                  V1 = V1 + _volume;
341                  }              
342 <        
342 >        volume_total = volume_total + _volume;
343          }
344 <
344 >  printf( "Volume total : %lf\n",volume_total);
345    ///////////////////////////////////////
346    ///////Calcul du voisinage et//////////
347    //des pond�rations de r�gulation///
# Line 357 | Line 363 | int main(int argc, char **argv )
363                                            (ptr_o_element_com *) &m_element    );
364                  m_element->ren_volume   (                        &_volume     );
365                  volume[i] = _volume                                            ;
366 <                distance_ref[i] = 2.5*pow((12.*_volume/co_rc_2),co_1_3)        ;
366 >                distance_ref[i] = coeff_voisins*pow((12.*_volume/co_rc_2),co_1_3);
367                  m_ptr_etude->ren_nbr_voisins_sphere( (ulong)      i            ,
368                                                      (vifl *) &distance_ref[i]  ,
369                                                     (ulong *) &m_nbr_voisins[i]);
# Line 391 | Line 397 | int main(int argc, char **argv )
397          Ctot[i] = 0.0;
398          }
399  
400 <  while ((fabs(change) > 0.1) && (iter <= iter_max))
400 >  while ((fabs(change) > critere_convergence) && (iter <= iter_max))
401    {
402  
403          ///////////////////////////////////////
# Line 653 | Line 659 | int main(int argc, char **argv )
659  
660          //D�termination des multiplicateurs de Lagrange par dichotomie
661          l1= 0. ;
662 <        l2= 1e8 ;
662 >        l2= 1e8;
663          while ((l2-l1) > 1e-12)
664          {
665          lmid = 0.5*(l2+l1);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines