34 Nom nom,nom2,nomS,nom_dom;
40 nom2+=
Nom(
".factforme");
42 nomS2+=
Nom(
".facesrayo");
45 int nombre_faces_rayonnantes=
domaine.nb_bords()+
domaine.nb_raccords();
47 DoubleTab FIJ(nombre_faces_rayonnantes,nombre_faces_rayonnantes);
48 DoubleVect SI(nombre_faces_rayonnantes);
51 Cerr <<
"Ouverture du fichier des bords " << nomS2 << finl;
53 fr << nombre_faces_rayonnantes <<
" " << nombre_faces_rayonnantes << finl;
54 Cerr <<
"Ouverture du fichier Ansys " << nom << finl;
55 EFichier premiere_lecture_ansys(nom);
57 int nombre_faces_ansys;
59 premiere_lecture_ansys>>motlu;
71 nombre_faces_ansys=-1;
72 while(motlu!=
"TOTAL=")
73 premiere_lecture_ansys>>motlu;
74 premiere_lecture_ansys>>motlu;
75 while(motlu!=
"Element" && motlu!=
"TOTAL=" && motlu!=
"*****")
77 premiere_lecture_ansys>>motlu;
80 Cerr <<
"Warning trouve dans le fichier " << nom <<
". Calcul des facteurs de " << finl;
81 Cerr <<
"forme interrompu. Contacter le support TRUST." << finl;
89 while(motlu!=
"ELEMENTS=")
90 premiere_lecture_ansys>>motlu;
91 premiere_lecture_ansys >> nombre_faces_ansys;
93 Cerr <<
"Nombre de faces qui vont etre lus:" << nombre_faces_ansys << finl;
98 int deja_regroupe_dans_ansys=0;
99 if (nombre_faces_rayonnantes==nombre_faces_ansys)
100 deja_regroupe_dans_ansys=1;
102 double min_total=1, max_total=0;
106 for (I=0; I<nombre_faces_rayonnantes; I++)
114 for (i=0; i<nb_faces; i++)
120 if (deja_regroupe_dans_ansys)
122 for (i=0; i<nb_faces; i++)
127 while(motlu!=
"TOTAL=")
130 Cerr <<
"\rTotal des facteurs de forme sur la ligne " <<I*nb_faces+i+1<<
" : " << total_lu << finl;
131 for (J=0; J<nombre_faces_rayonnantes; J++)
135 if (deja_regroupe_dans_ansys)
137 for (j=0; j<nombre_faces; j++)
142 if (deja_regroupe_dans_ansys)
145 FIJ(I,J)+=Si(i)*FiJ/SI(I);
147 if (sup_strict(total_lu,1.001))
149 Cerr <<
"La somme des facteurs de forme (" << total_lu <<
") de la ligne " << I+1 <<
" depasse 1 !" << finl;
150 Cerr <<
"Il se peut que vous ayez fait un calcul Ansys avec" << finl;
151 Cerr <<
"option faces non cachees qui ne soit pas justifie." << finl;
154 else if (est_egal(total_lu,0))
156 Cerr <<
"La somme des facteurs de forme de la ligne " << I+1 <<
" vaut 0 !" << finl;
157 Cerr <<
"Cela concerne le bord " << (I<
domaine.nb_bords()?
domaine.bord(I).le_nom():
domaine.raccord(I-
domaine.nb_bords())->le_nom()) << finl;
158 if (est_egal(SI(I),0))
160 Cerr <<
"La surface de ce bord est nulle..." << finl;
164 Cerr <<
"Ce bord est peut etre sur l'axe de revolution de votre calcul 2D axisymetrique." << finl;
165 Cerr <<
"Retirez ce bord de votre maillage .geom et relancer le calcul des facteurs de forme." << finl;
169 Cerr <<
"Une face du maillage .geom est mal orientee." << finl;
170 Cerr <<
"Contactez le support TRUST." << finl;
176 min_total=std::min(min_total,total_lu);
177 max_total=std::max(max_total,total_lu);
182 Cerr <<
"Somme des facteurs de forme sur la matrice Ansys lue: Min=" << min_total <<
" Max=" << max_total << finl;
183 if (min_total<0.9) Cerr <<
"Les facteurs de forme ne sont pas bien calcules. Essayer d'ameliorer la precision du calcul Ansys." << finl;
184 if (min_total<0.5) Cerr <<
"Il se peut qu'il y'ait un probleme dans le convertisseur TRUST->Ansys. Contacter le support TRUST." << finl;
188 for (I=0; I<nombre_faces_rayonnantes; I++)
190 double total_calcule=0;
191 for (J=0; J<nombre_faces_rayonnantes; J++)
192 total_calcule+=FIJ(I,J);
193 min_total=std::min(min_total,total_calcule);
194 max_total=std::max(max_total,total_calcule);
196 Cerr <<
"Somme des facteurs de forme apres regroupement: Min=" << min_total <<
" Max=" << max_total << finl;
201 Cerr <<
"Debut symetrisation et normalisation des facteurs de forme." << finl;
209 for (i=0; i<nombre_faces_rayonnantes; i++)
210 for (j=i+1; j<nombre_faces_rayonnantes; j++)
212 err=SI(i)*Fij(i,j)-SI(j)*Fij(j,i);
213 Fij(i,j)-=(err/2./SI(i));
214 Fij(j,i)+=(err/2./SI(j));
218 err=local_max_abs_vect(Err);
222 for (i=0; i<nombre_faces_rayonnantes; i++)
225 for (j=0; j<nombre_faces_rayonnantes; j++)
227 for (j=0; j<nombre_faces_rayonnantes; j++)
229 min_total=std::min(x,min_total);
232 Cerr <<
"\rIteration " << inter <<
": Residu="<<err<<
" Min(somme normalisee des facteurs de forme)=" << min_total <<
" ";
241 err=local_max_abs_vect(Err);
246 Cerr <<
"Erreur dans le calcul des facteurs de forme apres le regroupement." << finl;
247 Cerr <<
"Contacter le support TRUST." << finl;
250 Cerr << finl <<
"Ecriture du fichier " << nom2 <<
" contenant les facteurs de forme pour TRUST." << finl;
252 ff << nombre_faces_rayonnantes << finl;
253 for (I=0; I<nombre_faces_rayonnantes; I++)
255 for (J=0; J<nombre_faces_rayonnantes; J++)
256 ff << FIJ(I,J) <<
" ";
259 Cerr <<
"Ecriture du fichier " << nomS2 <<
" contenant les faces rayonnantes." << finl;