--- optimisation/src/optimisation_topo.cpp 2009/11/10 19:01:30 218 +++ optimisation/src/optimisation_topo.cpp 2010/03/03 14:42:23 235 @@ -69,33 +69,25 @@ int main(int argc, char **argv ) ulong j ; ulong l ; ulong iter = 1 ; - ulong iter_max = 50 ; //On sp�cifit le nombre d'it�ration maximum permit (par défaut 50) ulong _type ; //Entier correspondant au type d'�l�ment ulong fic_size1; ulong fic_size2; ulong fic_size3; ulong fic_size4; - vifl l1; vifl l2 ; //Variables pour la dichotomie - vifl m= 0.18; vifl lmid ; + vifl l1; vifl l2; vifl lmid; //Variables pour la dichotomie vifl critere_densite = 0.0 ; - vifl E = 210e9 ; //module de young (par d�faut acier) - vifl nu = 0.3 ; //coefficient de poisson (par d�faut acier) - vifl rho = 7850. ; //masse volumique (par d�faut acier) - vifl Vx = 0. ; //volume de mati�re � optimiser (design) - vifl V1 = 0. ; //volume de mati�re fixe (non-design) - vifl frac_vol = 0.6 ; //fraction volumique de la zone active (valeur par défaut) - vifl penal = 3.0 ; //coefficient de p�nalisation (par défaut 3) - vifl k = 3.0 ; //Coefficient k pour le calcul des poids Hv - vifl niveau = 150. ; //Nombre de niveaux de densit�s (par défaut 150) - vifl change = 1. ; - vifl seuil = 0.8 ; //Seuil pour la visualisation des éléments conservés (0.8 par défaut) - vifl densite_min = 1e-3 ; //Densit� minimale de 0.001 + vifl E = 210e9 ; //module de young (par defaut acier) + vifl nu = 0.3 ; //coefficient de poisson (par defaut acier) + vifl rho = 7850. ; //masse volumique (par defaut acier) + vifl Vx = 0. ; //volume de matiere fixe optimiser (design) + vifl V1 = 0. ; //volume de matiere fixe (non-design) vifl densite_max = 1.0 ; + vifl change = 1. ; vifl m_item ; vifl _volume ; vifl m_distance ; - vifl **m_V_distance ; //Tableau de pointeur vers les distances aux voisins de chaque éléments + vifl **m_V_distance ; //Tableau de pointeur vers les distances aux voisins de chaque elements vifl x1 ; vifl x2 ; vifl x3 ; @@ -107,9 +99,18 @@ int main(int argc, char **argv ) ty_RSLT m_design ; + ulong iter_max = 50 ; //Nombre d'iteration maximum permit + vifl critere_convergence = 0.1; //Critère de convergence par défaut + vifl coeff_voisins = 2.5 ; //Valeur par défaut du coefficient multipliant pour le calcul des voisins + vifl m = 0.2 ; //Limite supérieure m pour la dichotomie + vifl frac_vol = 0.6 ; //fraction volumique de la zone active f + vifl penal = 3.0 ; //coefficient de penalisation p + vifl k = 3.0 ; //Coefficient k pour le calcul des poids Hv + vifl niveau = 150. ; //Nombre de niveaux de densites + vifl seuil = 0.8 ; //Seuil pour la visualisation des éléments conservés + vifl densite_min = 1e-3 ; //Densite minimale (par défaut 0.001) - - //Acquisition des param�tres de l'�tude + //Acquisition des parametres de l'etude for (int i=0;iren_volume ( &_volume ); volume[i] = _volume ; - distance_ref[i] = 2.5*pow((12.*_volume/co_rc_2),co_1_3) ; + distance_ref[i] = coeff_voisins*pow((12.*_volume/co_rc_2),co_1_3); m_ptr_etude->ren_nbr_voisins_sphere( (ulong) i , (vifl *) &distance_ref[i] , (ulong *) &m_nbr_voisins[i]); @@ -391,7 +397,7 @@ int main(int argc, char **argv ) Ctot[i] = 0.0; } - while ((fabs(change) > 0.1) && (iter <= iter_max)) + while ((fabs(change) > critere_convergence) && (iter <= iter_max)) { /////////////////////////////////////// @@ -653,7 +659,7 @@ int main(int argc, char **argv ) //D�termination des multiplicateurs de Lagrange par dichotomie l1= 0. ; - l2= 1e8 ; + l2= 1e8; while ((l2-l1) > 1e-12) { lmid = 0.5*(l2+l1);