Télécharger rayo-axi-3.dgibi

Retour à la liste

Numérotation des lignes :

  1. * fichier : rayo-axi-3.dgibi
  2.  
  3. *******************************************
  4. *******************************************
  5.  
  6. *************************************************************
  7. * *
  8. * Calcul d'un cylindre infini (de rayon L) soumis à de *
  9. * la convection et du rayonnement. *
  10. * *
  11. * Modélisation axisymétrique. *
  12. * *
  13. * Auteurs : Michel Bulik & Nadia Coulon *
  14. * *
  15. * Date : Octobre 1995 *
  16. * *
  17. * Références : *
  18. * ------------ *
  19. * [1] Klaus-Jürgen Bathe & Mohammad R. Khoshgoftaar, *
  20. * Finite element formulation and solution of *
  21. * non-linear heat transfer, Nuclear Engineering and *
  22. * Design, v. 51 (1979), pp. 389-401 *
  23. * *
  24. * [2] J. Joly, Cas tests non linéaires de validation pour *
  25. * DELFINE, Note technique EMT.SMTS.TTMF 84/29 *
  26. * *
  27. * [3] James SUCEC & Ashok KUMAR, Transient Cooling of a *
  28. * Solid Cylinder by Combined Convection ans Radiation *
  29. * at its Surface, International Journal for Numerical *
  30. * Methods in Engineering, vol. 6 (1973), pp. 297-312 *
  31. * *
  32. *************************************************************
  33. *
  34. * La solution de référence a été obtenue par une méthode de
  35. * différences finies décrite dans [3] et que réalise le programme
  36. * suivant en C. Après sa compilation il convient de demander
  37. * l'éditions de liens avec la subroutine gauscl de Castem2000.
  38. *
  39. *
  40. * #include<stdio.h>
  41. * #include<math.h>
  42. *
  43. * #define N 26 /* Nombre de points */
  44. *
  45. * double A[N*N], phi_n[N], phi_n1[N] ;
  46. *
  47. * void main()
  48. * {
  49. * double L = 1. ;
  50. * double eta = 0.55 ;
  51. * double Bi = 1.0 ;
  52. * double Gamma = 1.0 ;
  53. * double alpha = 1.0 ;
  54. *
  55. * double delta_r, delta_R, delta_t, M ;
  56. * int i, j, k, dimension, iprint ;
  57. *
  58. * delta_t = 0.001 ;
  59. * delta_r = L / (N - 1) ;
  60. * delta_R = delta_r / L ;
  61. * M = alpha * delta_t / (delta_r*delta_r) ;
  62. * dimension = N ;
  63. * iprint = 0 ;
  64. *
  65. * /* État initial */
  66. * for(i=0;i<N;i++) phi_n1[i]=1 ;
  67. * /* La matrice */
  68. * /* La première ligne */
  69. * A[0] = 1.0 + 4*M ;
  70. * A[N] = -4*M ;
  71. * /* Les lignes 2,...,N-1 */
  72. * for(j=2;j<=N-1;j++) {
  73. * k = (j-1)*N + j - 1 ;
  74. * A[k-N] = -1*M*(1.0-(1.0/(2*(j-1)))) ;
  75. * A[k ] = 1.0 + 2*M ;
  76. * A[k+N] = -1*M*(1.0+(1.0/(2*(j-1)))) ;
  77. * }
  78. * /* La dernière ligne */
  79. * A[N*N-N-1] = -2*M*(1-delta_R/2) ;
  80. * A[N*N -1] = 1.0 + 2*M*(1-delta_R/2) + 2*delta_R*M*Bi ;
  81. *
  82. * /* Boucle sur les pas de temps */
  83. * for(j=0;j<10000;j++) {
  84. *
  85. * /* On met le résultat dans le second membre */
  86. * for(i=0;i<N;i++) phi_n[i] = phi_n1[i] ;
  87. * /* puis on modifie le dernier terme */
  88. * phi_n[N-1] -= (2*M*delta_R*Gamma) * (pow(phi_n[N-1],4)*pow(1-eta,3) + 4*pow(phi_n[N-1],3)*pow(1-eta,2)*eta
  89. * + 6*pow(phi_n[N-1],2)*(1-eta)*eta*eta + 4*phi_n[N-1]*pow(eta,3) ) ;
  90. *
  91. * gauscl(A,phi_n1,phi_n,&dimension,&dimension,&iprint) ;
  92. *
  93. * /* Impression des résultats */
  94. * printf("%13g %13g %13g\n",(j+1)*delta_t,phi_n1[0],phi_n1[N-1]) ;
  95. * }
  96. * }
  97. *
  98. **************************************************************
  99. *
  100. *** Options ...
  101.  
  102. opti dime 2 mode axis elem seg2 echo 1 ;
  103.  
  104. *** Paramètres ...
  105.  
  106. L = 1. ;
  107. ep = L / 10 ;
  108. eta = 0.55 ;
  109.  
  110. graph = faux ;
  111.  
  112. Tempini = 273. ;
  113. Tempext = eta * Tempini ;
  114. cte_sb = 5.673e-8 ;
  115. Gamma = 1.0 ;
  116. si ( neg Gamma 0. ) ;
  117. lambda = (cte_sb * Tempini * Tempini * Tempini * L) / Gamma ;
  118. mess 'Lambda = ' lambda ;
  119. valemis = 1. ;
  120. sinon ;
  121. lambda = 1. ;
  122. mess 'Lambda choisie arbitrairement = ' lambda ;
  123. valemis = 0. ;
  124. finsi ;
  125. Bi = 1.0 ;
  126.  
  127. *** Points ...
  128.  
  129. dens 0.1 ;
  130. p1 = 0 0 ;
  131. p2 = 0 ep ;
  132.  
  133. vechoriz = L 0 ;
  134.  
  135. *** Lignes ...
  136.  
  137. li1 = p1 d 1 p2 ;
  138.  
  139. *** Surface ...
  140.  
  141. opti elem qua4 ;
  142. su1 = li1 tran vechoriz dini 0.1 dfin 0.01 ;
  143.  
  144. li2 = cote 3 su1 ;
  145. p3 = li2 poin proc vechoriz ;
  146.  
  147. li3 = cote 2 su1 ;
  148.  
  149. si(graph) ;
  150. titr 'Le maillage du cylindre' ;
  151. trac su1 ;
  152. finsi ;
  153.  
  154. *** Modèles ...
  155.  
  156. mocnd = mode su1 thermique ;
  157. macnd = mate mocnd 'K' lambda 'RHO' 1. 'C' lambda ;
  158.  
  159. mocnv = mode li2 thermique convection ;
  160. macnv = mate mocnv 'H' (Bi*lambda/L) ;
  161.  
  162. moray = mode li2 thermique rayonnement infini ;
  163. maray = mate moray 'EMIS' valemis ;
  164.  
  165. *** Préparation de la table pour PASAPAS ...
  166.  
  167. tabnl = table ;
  168.  
  169. tabnl . MODELE = mocnd et mocnv et moray;
  170. tabnl . CARACTERISTIQUES = macnd et macnv et maray ;
  171.  
  172. lr1 = prog 0 100 ;
  173. lr2 = prog 1 1 ;
  174. ev1 = evol manu 't' lr1 'Text' lr2 ;
  175. chtext = manu chpo li2 1 'T' Tempext ;
  176. tabnl . CHARGEMENT = (char 'TECO' ev1 chtext) et
  177. (char 'TERA' ev1 chtext) ;
  178.  
  179. tabnl . TEMPS_CALCULES = prog 0. pas 2.e-4 0.001
  180. pas 5.e-4 0.01
  181. pas 0.005 0.1
  182. pas 0.05 1.
  183. pas 0.2 10. ;
  184.  
  185. tabnl . TEMPERATURES = table ;
  186. tabnl . TEMPERATURES . 0 = manu chpo su1 1 'T' Tempini ;
  187.  
  188. ** tabnl . RAYONNEMENT = table ;
  189. * tabnl . RAYONNEMENT . 1 = table ;
  190. * tabnl . RAYONNEMENT . 1 . TYPE = 'INFINI' ;
  191. * tabnl . RAYONNEMENT . 1 . MODELE = moray ;
  192.  
  193. tabnl . 'PROCEDURE_THERMIQUE' = 'DUPONT' ;
  194. tabnl . 'CTE_STEFAN_BOLTZMANN' = cte_sb ;
  195.  
  196. tabnl . 'RELAXATION_THETA' = 1. ;
  197.  
  198. *** Appel à PASAPAS ...
  199.  
  200. pasapas tabnl ;
  201.  
  202. *** Petit post-traitement ...
  203.  
  204. listt = prog ;
  205. listtp1 = prog ;
  206. listtp1r = prog ;
  207. listtp3 = prog ;
  208. listtp3r = prog ;
  209. nbpas = dime (tabnl . TEMPS) ;
  210. repeter surpas (nbpas-1) ;
  211. lindice = &surpas ;
  212. listt = listt et (prog (tabnl . TEMPS . lindice)) ;
  213. valtp1 = extr (tabnl . TEMPERATURES . lindice) T p1 ;
  214. listtp1 = listtp1 et (prog valtp1) ;
  215. valtp1r = (valtp1 - Tempext) / (Tempini - Tempext) ;
  216. listtp1r = listtp1r et (prog valtp1r) ;
  217. valtp3 = extr (tabnl . TEMPERATURES . lindice) T p3 ;
  218. listtp3 = listtp3 et (prog valtp3) ;
  219. valtp3r = (valtp3 - Tempext) / (Tempini - Tempext) ;
  220. listtp3r = listtp3r et (prog valtp3r) ;
  221.  
  222. * ... Vérification s'il n'y a pas d'oscillations spatiales ...
  223. si(faux) ;
  224. chtit = chai 'Profil de temperature au temps '
  225. (tabnl . TEMPS . lindice) ;
  226. titr chtit ;
  227. profil = evol chpo (tabnl . TEMPERATURES . lindice)
  228. 'T' li3 ;
  229. dess profil ;
  230. finsi ;
  231.  
  232. fin surpas ;
  233.  
  234. titr 'Evolution de la temperature sur l axe du cylindre' ;
  235. evtp1 = evol manu 't' listt 'T' listtp1 ;
  236. titr 'Evolution de la temperature relative sur l axe du cylindre' ;
  237. evtp1r = evol manu 't' listt 'T' listtp1r ;
  238.  
  239. titr 'Evolution de la temperature au bord du cylindre' ;
  240. evtp3 = evol manu 't' listt 'T' listtp3 ;
  241. titr 'Evolution de la temperature relative au bord du cylindre' ;
  242. evtp3r = evol manu 't' listt 'T' listtp3r ;
  243.  
  244. si(graph) ;
  245. dess evtp1 LOGX ;
  246. dess evtp1r LOGX ;
  247. dess evtp3 LOGX ;
  248. dess evtp3r LOGX ;
  249. finsi ;
  250.  
  251. *** Vérification si c'est OK ...
  252.  
  253. listtref = prog 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 ;
  254. listbord = prog 0.465573 0.352181 0.276436 0.218669 0.173342
  255. 0.137545 0.109216 0.0867689 0.0689675 0.0548392 ;
  256. listcent = prog 0.95046 0.769248 0.598471 0.46495 0.36275
  257. 0.284227 0.223483 0.176205 0.139228 0.110195 ;
  258.  
  259. titr 'Evolution de la T relative au bord du cylindre (D-F)' ;
  260. evbord = (evol manu 't' listtref 'T' listbord) coul ROUG ;
  261.  
  262. titr 'Evolution de la T relative au centre du cylindre (D-F)' ;
  263. evcent = (evol manu 't' listtref 'T' listcent) coul JAUN ;
  264.  
  265. si(graph) ;
  266. dess (evtp3r et evbord) LOGX ;
  267. dess (evtp1r et evcent) LOGX ;
  268. finsi ;
  269.  
  270. nbtests = dime listtref ;
  271. maxerr = 0. ;
  272. repeter surtst nbtests ;
  273. instant = extr listtref &surtst ;
  274. tcalc = peche tabnl TEMPERATURES instant ;
  275.  
  276. valref = extr listbord &surtst ;
  277. valcalc = extr tcalc T p3 ;
  278. valcalcr = (valcalc - Tempext) / (Tempini - Tempext) ;
  279. errrel = valcalcr - valref ;
  280. mess 'Erreur au bord à t =' instant 'est de' errrel ;
  281. errrela = abs errrel ;
  282. si(errrela > maxerr) ;
  283. maxerr = errrela ;
  284. finsi ;
  285.  
  286. valref = extr listcent &surtst ;
  287. valcalc = extr tcalc T p1 ;
  288. valcalcr = (valcalc - Tempext) / (Tempini - Tempext) ;
  289. errrel = valcalcr - valref ;
  290. mess 'Erreur au centre à t =' instant 'est de' errrel ;
  291. errrela = abs errrel ;
  292. si(errrela > maxerr) ;
  293. maxerr = errrela ;
  294. finsi ;
  295. fin surtst ;
  296. si(maxerr > 0.02) ;
  297. erre 5 ;
  298. finsi ;
  299.  
  300. *** Bye ...
  301.  
  302. fin ;
  303.  
  304.  
  305.  
  306.  
  307.  
  308.  
  309.  
  310.  
  311.  

© Cast3M 2003 - Tous droits réservés.
Mentions légales