Télécharger benchmark_imst.dgibi

Retour à la liste

Numérotation des lignes :

  1. * fichier : benchmark_imst.dgibi
  2. ***************************************************************
  3. * *
  4. * NOM : benchmark_imst.dgibi *
  5. * DESCRIPTION : fiche de validation CASTEM2000 *
  6. * Mécanique des Fluides *
  7. * Convection naturelle laminaire *
  8. * en cavité rectangulaire (2D) *
  9. * FONCTIONS *
  10. * TESTEES : 'NS' algorithme semi-implicite *
  11. * option CENTREE *
  12. * approximation de Boussinesq *
  13. * éléments QUA8 'MACRO' *
  14. * *
  15. * AUTEUR : Stéphane GOUNAND (CEA/DRN/DMT/SEMT/TTMF) *
  16. * e-mail : gounand@semt2.smts.cea.fr *
  17. * *
  18. ***************************************************************
  19. * *
  20. * VERSION : v1, 19/9/97, version initiale *
  21. * HISTORIQUE : v1, 19/9/97, création *
  22. * HISTORIQUE : 15/06/2014 passage EQPR -> EQEX *
  23. * HISTORIQUE : *
  24. * HISTORIQUE : *
  25. * *
  26. ***************************************************************
  27. * *
  28. * Priere de completer la partie HISTORIQUE apres modification *
  29. * du jeu de donnees afin de faciliter la maintenance *
  30. * *
  31. ***************************************************************
  32. *
  33. * DESCRIPTION DETAILLEE :
  34. *
  35. * -- IMST -- Convection naturelle laminaire à Prandtl (Pr) = 0
  36. * Algorithme semi implicite
  37. * opérateur NS (option CENTREE)
  38. *
  39. * phi = 0
  40. * ------------------------
  41. * | |
  42. * T1 = 0 | H | T2 = A
  43. * | L |
  44. * ------------------------
  45. * phi = 0
  46. *
  47. * A = L/H = 4 l'allongement
  48. * U = 0 sur les parois
  49. * Le profil de température est imposé T = T1 + (T2-T1)*(x/L)
  50. *
  51. * La structure de l'écoulement ne dépend que
  52. * du nombre de Grashof Gr :
  53. * Gr = g beta (T2 - T1) H**3 A / nu**2
  54. *
  55. * ^
  56. * | Psi max (valeur max de la fonction de courant)
  57. * |
  58. * |
  59. * -| o o
  60. * | unsteady -> o v
  61. * | (3 cells) . v
  62. * | ----------- o v . o
  63. * | steady -> .^ v o
  64. * | (3 cells) . ^ v .
  65. * | ----------- o ^ o
  66. * -| ^ .
  67. * | steady -> . ^ . <-- steady (2 cells)
  68. * | o
  69. * | (1 cell) .
  70. * |
  71. * | .
  72. * | o
  73. * -|-------------------------------------------> Gr
  74. * I I I
  75. * 1.E4 2.E4 3.E4
  76. **************************************************************
  77. * Références : - Gounand, S. 1997
  78. * Simulation numérique de cellules
  79. * thermoconvectives.
  80. * Rapport CEA/DMT 97/357.
  81. * - Le Garrec, S. 1988
  82. * Convection naturelle en cavité pour des
  83. * fluides à faible nombre de Prandtl.
  84. * Rapport CEA/DMT 88/216.
  85. * - Le Garrec, S. & Magnaud, J.-P.
  86. * Numerical Simulation of oscillatory
  87. * convection in low Prandtl Fluids with
  88. * TRIO-EF.
  89. * A GAMM Workshop Edited by Bernard Roux
  90. * Notes on Numerical Fluid Mechanics,Volume 27
  91. * pp. 189-199. (Vieweg, Braunschweig 1990)
  92. *
  93. ***************************************************************
  94. *
  95. * JEU DE DONNEE :
  96. *
  97. prg = ('CHAINE' 'Benchmark Imst') ;
  98. **** Options
  99. * court = VRAI : le cas-test s'effectue en une dizaine
  100. * de secondes.
  101. * Gr = 5000 => une cellule stationnaire
  102. * la comparaison s'effectue sur le profil
  103. * Uy(x) le long de la médiane horizontale.
  104. * On vérifie également que l'écoulement
  105. * est centrosymétrique.
  106. * court = FAUX : maillage raffiné ;
  107. * Gr = 40000 => bifurcation 3->2 cellules
  108. * environ 1h30 CPU avec les graphiques
  109. *
  110. * graph = VRAI : on trace les graphiques (historiques, champs)
  111. * On a plus de calculs avec cette option
  112. * (fonction de courant, convergence...)
  113. * On mettra donc graph = faux pour la fiche
  114. * de validation
  115. *
  116. * inta = VRAI si on est en interactif ; 0 sinon
  117. *
  118. * discconv : option de discrétisation des termes de
  119. * convection pour les équations de Navier-Stokes
  120. * choix possibles : 'CENTREE', 'SUPG'...
  121. * voir notice de 'NS'
  122. court = VRAI ;
  123. graph = FAUX ;
  124. inta = FAUX ;
  125. typelem = 'QUA8' ;
  126. discconv = 'CENTREE' ;
  127.  
  128. DISCR = 'MACRO' ;
  129. KPRESS = 'CENTRE' ;
  130. * betap : paramètre de stabilisation de la pression
  131. BETAP = 1. ;
  132.  
  133. 'OPTION' 'DIME' 2 'ELEM' typelem ;
  134.  
  135. 'SI' ('NON' inta) ;
  136. 'OPTION' 'TRAC' 'PS' ;
  137. 'OPTION' 'ECHO' 1 ;
  138. 'SINON' ;
  139. **od = 'TEXTE' 'OPTION DONN 3' ;
  140. 'FINSI' ;
  141.  
  142. *************************************************************
  143. **** Définition de quelques procédures :
  144. ** -> SUMMARY : affiche un résumé des paramètres
  145. ** -> CALCPSI : calcul de la fonction de courant
  146. ** (appelée par 'EXEC' via la table 'EQEX')
  147. ** -> MAJHIST : mise à jour d'historiques
  148. ** (appelée par 'EXEC' via la table 'EQEX')
  149. ** -> TRHIST : tracé des historiques
  150. ** -> TRCHAMP : tracé des différents champs
  151. ** (appelée par 'EXEC' via la table 'EQEX')
  152. ** NB : pour simplifier, on ne transmet pas les paramètres à
  153. ** SUMMARY. C'est de la mauvaise programmation...
  154. ** Les autres procédures sont correctes
  155. ** sous toutes réserves
  156. *
  157. ** SUMMARY
  158. 'DEBPROC' SUMMARY ;
  159. 'MESSAGE' ('CHAINE' 'Programme : ' prg) ;
  160. 'SAUTER' 'LIGNE' ;
  161. 'MESSAGE' ('CHAINE' '*** GEOMETRIE :') ;
  162. 'MESSAGE' ('CHAINE' 'Boite carrée : ' l ' x' h) ;
  163. 'MESSAGE' ('CHAINE' ' soient : ' nl 'x' nh '=' (nl '*' nh) ' éléments ' typelem) ;
  164. 'MESSAGE' ('CHAINE' ' soient : ' (nl '*' nh '*' 4) ' éléments linéaires') ;
  165. 'SAUTER' 'LIGNE' ;
  166. 'MESSAGE' ('CHAINE' '*** PHYSIQUE :') ;
  167. 'MESSAGE' ('CHAINE' 'Rapport d_aspect : ' ('ENTIER' aspect)) ;
  168. 'MESSAGE' ('CHAINE' 'Nombre de Grashof : '('ENTIER' Gr) ) ;
  169. 'MESSAGE' ('CHAINE' 'Température de référence : ' tref ' comprise entre 0 et ' ('ENTIER' aspect)) ;
  170. 'SAUTER' 'LIGNE' ;
  171. 'MESSAGE' ('CHAINE' '*** NUMERIQUE :') ;
  172. 'MESSAGE' ('CHAINE' 'Discrétisation ' discconv ' des termes de convection.');
  173. 'MESSAGE' ('CHAINE' ' Alfa = ' alpha) ;
  174. 'MESSAGE' ('CHAINE' ' Béta = ' beta) ;
  175. 'SAUTER' 'LIGNE' ;
  176. rvpdt = rv . 'PASDETPS' ;
  177. 'MESSAGE' ('CHAINE' '*** TEMPS :') ;
  178. 'MESSAGE' ('CHAINE' 'Nb. itérations : ' ((rvpdt . 'NUPASDT') '-' 1)) ;
  179. 'MESSAGE' ('CHAINE' 'Temps physique : ' (rvpdt . 'TPS')) ;
  180. 'MESSAGE' ('CHAINE' 'Temps CPU : ' ('ENTIER' (thist . 'tpscpu')) ' ms') ;
  181. 'FINPROC' ;
  182.  
  183.  
  184. ** CALCPSI
  185. 'DEBPROC' CALCPSI ;
  186. 'ARGUMENT' trx*'TABLE ' ;
  187. as2 ama1 = 'KOPS' 'MATRIK' ;
  188. trv = (trx . 'EQEX') ;
  189. tinco = (trv . 'INCO') ;
  190. $dom = (trx . 'DOMZ') ;
  191. cdom = 'CONTOUR' ('DOMA' $dom 'MAILLAGE') ;
  192. vitesse = 'KCHT' $dom 'VECT' 'SOMMET' (tinco . 'UN') ;
  193. sw = 'KOPS' vitesse 'ROT' $dom ;
  194. rk = 'EQEX' $dom 'OPTI' 'EF' 'IMPL' 'ZONE' $dom 'OPER' 'LAPN' 1.0D0 'INCO' 'PSI' 'ZONE' $dom 'OPER' 'FIMP' sw 'INCO' 'PSI' 'CLIM' 'PSI' 'TIMP' cdom 0.0D0 ;
  195. rk . 'INCO' = 'TABLE' 'INCO' ;
  196. rk . 'INCO' . 'PSI' = 'KCHT' $dom 'SCAL' 'SOMMET' 0.0D0 ;
  197. *-*-*-*- A remplacer par EXEC qd ca marchera...
  198. EXEC rk ;
  199. *-*-*-*-
  200. tinco . 'PSI' = (rk . 'INCO' . 'PSI') ;
  201.  
  202. 'FINPROC' as2 ama1 ;
  203.  
  204. ** MAJHIST
  205. 'DEBPROC' MAJHIST ;
  206. 'ARGUMENT' trx*'TABLE ' ;
  207. as2 ama1 = 'KOPS' 'MATRIK' ;
  208. trv = (trx . 'EQEX') ;
  209. tinco = (trv . 'INCO') ;
  210. th = (trv . 'HISTOIRE') ;
  211. tp = (trv . 'PASDETPS') ;
  212. vit = (tinco . 'UN') ; vitm1 = (tinco . 'UN-1') ;
  213. vitref = (tinco . 'UREF') ;
  214. psi = (tinco . 'PSI') ;
  215. npdt = (tp . 'NUPASDT') ;
  216. * Calcul de l'erreur relative (norme Linfini) entre deux
  217. * champs de vitesse successifs
  218. errrel = ('MAXIMUM' (vit '-' vitm1) 'ABS') '/' vitref ;
  219. 'SI' ('MULT' npdt (trv . 'FIDT')) ;
  220. 'MESSAGE' ('CHAINE' 'Pdt : ' npdt ' |Un - Un_1| Linf = ' errrel) ;
  221. 'FINSI' ;
  222. tinco . 'UN-1' = 'COPIER' vit ;
  223. * Mise à jour des différentes listes
  224. mpsi = 'MAXIMUM' psi 'ABS' ;
  225. th . 'ltps' = ((th . 'ltps') 'ET' ('PROG' (tp . 'TPS'))) ;
  226. th . 'lpsi' = ((th . 'lpsi') 'ET' ('PROG' mpsi)) ;
  227. th . 'lerr' = ((th . 'lerr') 'ET' ('PROG' errrel)) ;
  228. thl = (th . 'lpdt') ;
  229. thl . 'conv' = ((thl . 'conv') 'ET' ('PROG' (tp . 'DTCONV'))) ;
  230. thl . 'diff' = ((thl . 'diff') 'ET' ('PROG' (tp . 'DTDIFU'))) ;
  231. thl . 'min' = ((thl . 'min') 'ET' ('PROG' (tp . 'DELTAT-1'))) ;
  232. 'FINPROC' as2 ama1 ;
  233.  
  234.  
  235. ** TRHIST
  236. 'DEBPROC' TRHIST ;
  237. 'ARGUMENT' th*'TABLE ' ;
  238. * On enlève le premier indice des listes
  239. hltps = 'ENLEVER' (th . 'ltps') 1 ;
  240. hlpsi = 'ENLEVER' (th . 'lpsi') 1 ;
  241. hlerr = 'ENLEVER' (th . 'lerr') 1 ;
  242. thl = (th . 'lpdt') ;
  243. hlpdt = 'ENLEVER' (thl . 'min') 1 ;
  244. hlconv = 'ENLEVER' (thl . 'conv') 1 ;
  245. hldiff = 'ENLEVER' (thl . 'diff') 1 ;
  246. * Pas de temps = fn(t)
  247. evpdt = 'EVOL' 'MANU' 'TEMPS' hltps 'PDT' hlpdt ;
  248. 'DESSIN' evpdt 'MIMA' 'TITR' 'Pas de temps' ;
  249. * LOG10(pas de temps) = fn(t)
  250. ltco = ('LOG' (hlconv '*' alpha)) '/' ('LOG' 10.0D0) ;
  251. ltdi = ('LOG' (hldiff '*' alpha)) '/' ('LOG' 10.0D0) ;
  252. ltmi = ('LOG' hlpdt) '/' ('LOG' 10.0D0) ;
  253. evco = 'COULEUR' ('EVOL' 'MANU' 'TEMPS' hltps 'dtconv' ltco) 'BLEU' ;
  254. evdi = 'COULEUR' ('EVOL' 'MANU' 'TEMPS' hltps 'dtdiff' ltdi) 'ROUG' ;
  255. evmi = 'COULEUR' ('EVOL' 'MANU' 'TEMPS' hltps 'dt' ltmi) 'BLAN' ;
  256. tabt = 'TABLE' ; tabt . 'TITRE' = 'TABLE' ;
  257. tabt . 1 = 'TIRC' ;
  258. tabt . 2 = 'TIRL' ;
  259. tabt . 3 = 'NOLI' ;
  260. tabt . 'TITRE' . 1 = 'CHAINE' 'Pdt convection' ;
  261. tabt . 'TITRE' . 2 = 'CHAINE' 'Pdt diffusion' ;
  262. tabt . 'TITRE' . 3 = 'CHAINE' 'Pdt min(conv, diff)' ;
  263. 'DESSIN' (evco 'ET' evdi 'ET' evmi) 'MIMA' 'TITR' 'Pas de temps' 'LEGE' tabt ;
  264. * Max |Fn de courant| = fn(t)
  265. evpsi = 'EVOL' 'MANU' 'TEMPS' hltps 'PSI' hlpsi ;
  266. 'DESSIN' evpsi 'MIMA' 'TITR' 'Max |Fn de courant|' ;
  267. * Max |Erreur Linf Vit.| = fn(t) (convergence)
  268. everr = 'EVOL' 'MANU' 'TEMPS' hltps 'ERRLINF' (('LOG' hlerr) '/' ('LOG' 10.0D0)) ;
  269. 'DESSIN' everr 'MIMA' 'TITR' 'Log Erreur Linf Vit.' ;
  270. 'FINPROC' ;
  271.  
  272. ** TRCHAMP
  273. 'DEBPROC' TRCHAMP ;
  274. 'ARGUMENT' trx*'TABLE ' ;
  275. as2 ama1 = 'KOPS' 'MATRIK' ;
  276. trv = (trx . 'EQEX') ;
  277. 'SI' ('NON' ('MULT' (trv . 'PASDETPS' . 'NUPASDT') (trv . 'NPTRC'))) ;
  278. 'QUITTER' TRCHAMP ;
  279. 'FINSI' ;
  280. tinco = (trv . 'INCO') ;
  281. $dom = (trx . 'DOMZ') ;
  282. dom = ('DOMA' $dom 'MAILLAGE') ;
  283. cdom = 'CONTOUR' dom ;
  284. tphy = (trv . 'PASDETPS' . 'TPS') ;
  285. * Vitesses
  286. vitesse = (tinco . 'UN') ; vref = (tinco . 'UREF') ;
  287. titv = ('CHAINE' 'Champ de vitesse (VECT SOMMET) à t = ' tphy) ;
  288. vv = 'VECTEUR' vitesse (0.2D0 '/' vref) 'UX' 'UY' 'JAUNE' ;
  289. 'TRACER' vv cdom 'TITR' titv ;
  290. * Fonction de courant
  291. 'OPTION' 'ISOV' 'SULI' ;
  292. psi = (tinco . 'PSI') ;
  293. titpsi = ('CHAINE' 'Fonction de courant (SCAL SOMMET) à t = ' tphy) ;
  294. 'TRACER' psi dom cdom 14 'TITR' titpsi ;
  295. * Pression
  296. * NB : On n'utilise pas 'ELNO' : on dessine une pression
  297. * constante sur un élément.
  298. pression = (trv . 'INCO' . 'PRESSION') ;
  299. modelp = 'MODELISER' dom 'THERMIQUE' ;
  300. elemp = 'KCHA' $dom 'CHAM' pression ;
  301. titpres = ('CHAINE' 'Pression (SCAL CENTRE) à t = ' tphy) ;
  302. 'TRACER' elemp modelp cdom 'TITR' titpres ;
  303. 'FINPROC' as2 ama1 ;
  304. *
  305. ** Fin de la définition des procédures
  306. **************************************************************
  307.  
  308. **************************************************************
  309. ** Début du 'main'
  310. *
  311. **** Définition des constantes
  312. * l, h, nl, nh : données pour la boite.
  313. * egeom : erreur géométrique pour 'ELIMINATION'
  314. * aspect : rapport d'aspect de la boite
  315. * nu, g, rho : paramètres du fluide
  316. * tg, td : températures sur les murs gauches et droits
  317. h = 1.0D0 ;
  318. 'SI' court ; nh = 3 ; 'SINON' ; nh = 5 ; 'FINSI' ;
  319. aspect = 4.0D0 ;
  320. l = h '*' aspect ;
  321. 'SI' court ;
  322. nl = 'ENTIER' (nh '*' 3) ;
  323. 'SINON' ;
  324. nl = 'ENTIER' (nh '*' aspect) ;
  325. 'FINSI' ;
  326. egeom = 1.0D-4 ;
  327. nu = 1.0D0 ; g = (0.D0 -1.D0) ;
  328. tg = 0.D0 ; td = aspect ;
  329.  
  330. **** Création des maillages
  331. lp = l '/' 2.0D0 ; hp = h '/' 2.0D0 ;
  332. mlp = (-1.0D0) '*' lp ; mhp = (-1.0D0 '*' hp) ;
  333. pmil = lp hp ;
  334. pA = 0.0D0 0.0D0 ; pB = l 0.0D0 ;
  335. pC = l h ; pD = 0.0D0 h ;
  336. pDA = 0.0D0 hp ; pBC = l hp ;
  337. bas = pA 'DROIT' nl pB ; haut = pD 'DROIT' nl pC ;
  338. rwall = pB 'DROIT' nh pC ; lwall = pA 'DROIT' nh pD ;
  339. median = pDA 'DROIT' nl pBC ;
  340. mt = 'DALLER' haut rwall bas lwall ;
  341. mt = chan mt QUAF ;
  342. $mt= MODE mt 'NAVIER_STOKES' DISCR ; DOMA $MT 'IMPR' ;
  343. mt = (DOMA $mt 'MAILLAGE') ; 'TASSER' mt ;
  344. haut = 'CHANGER' haut SEG2 ; bas = 'CHANGER' bas SEG2 ;
  345. lwall = 'CHANGER' lwall SEG2 ; rwall = 'CHANGER' rwall SEG2 ;
  346. median = 'CHANGER' median SEG2 ;
  347. cmt = (lwall 'ET' bas 'ET' rwall 'ET' haut) ;
  348. 'ELIMINATION' (mt 'ET' bas 'ET' rwall 'ET' haut 'ET' lwall 'ET' cmt 'ET' median) egeom ;
  349.  
  350. **** Initialisation de la table des historiques
  351. *
  352. thist = 'TABLE' 'HIST' ;
  353. TABTPS= 'TEMPS' 'NOEC';
  354. thist . 'tpscpu' = TABTPS.'TEMPS_CPU'.'INITIAL' ;
  355. * Listes
  356. thist . 'ltps' = 'PROG' ;
  357. thist . 'lpsi' = 'PROG' ;
  358. thist . 'lerr' = 'PROG' ;
  359. thist . 'lpdt' = 'TABLE' 'LPDT' ; thl = (thist . 'lpdt') ;
  360. thl . 'conv' = 'PROG' ; thl . 'diff' = 'PROG' ;
  361. thl . 'min' = 'PROG' ;
  362.  
  363. **** Initialisation des tables rv et rvp
  364. rv = 'EQEX' $mt 'OPTI' discconv 'ZONE' $mt 'OPER' 'NS' 'NU' 'GB' 'TN' 'TREF' 'INCO' 'UN' 'OPTI' 'CENTREE' 'ZONE' $mt 'OPER' 'DFDT' 1. 'UN' 'DELTAT' 'INCO' 'UN' ;
  365. * Conditions aux limites
  366. rv = 'EQEX' rv 'CLIM' 'UN' 'UIMP' cmt 0.0D0 'UN' 'VIMP' cmt 0.0D0 ;
  367. 'SI' graph ;
  368. rv = 'EQEX' rv 'ZONE' $mt 'OPER' 'CALCPSI' 'ZONE' $mt 'OPER' 'MAJHIST' 'ZONE' $mt 'OPER' 'TRCHAMP' ;
  369. 'FINSI' ;
  370.  
  371. RVP = EQEX 'OPTI' 'EF' KPRESS 'ZONE' $MT OPER KBBT -1. betap INCO 'UN' 'PRES' ;
  372.  
  373. rvp.'METHINV'.TYPINV=1 ;
  374. rvp.'METHINV'.IMPINV=0 ;
  375. rvp.'METHINV'.NITMAX=300;
  376. rvp.'METHINV'.PRECOND=3 ;
  377. rvp.'METHINV'.RESID =1.e-8 ;
  378. rvp.'METHINV' . 'FCPRECT'=100 ;
  379. rvp.'METHINV' . 'FCPRECI'=100 ;
  380.  
  381. RV.'PROJ' =RVP ;
  382.  
  383. rv . 'INCO' = 'TABLE' 'INCO' ;
  384. rv . 'HISTOIRE' = thist ;
  385.  
  386. **** Initialisation des inconnues
  387. * V -> 0 ; T gradient constant avec tg sur lwall, td sur rwall
  388. rv . 'INCO' . 'UN-1' = 'KCHT' $mt 'VECT' 'SOMMET' (0.D0 0.D0) ;
  389. rv . 'INCO' . 'UN' = 'KCHT' $mt 'VECT' 'SOMMET' (0.D0 0.D0) ;
  390. rv . 'INCO' . 'PRES' = 'KCHT' $mt 'SCAL' KPRESS 0.D0 ;
  391. rv . 'INCO' . 'TN' = 'KCHT' $mt 'SCAL' 'SOMMET' (tg '+' ((('COORDONNEE' 1 mt) '/' l) '*' (td '-' tg)) ) ;
  392.  
  393. **** Valeurs des paramètres :
  394. *
  395. ** Physiques
  396. *
  397. * Gr : Nombre de Grashof
  398. * tref : température de référence (approx. de Boussinesq)
  399. * Il faut la dissymétriser pour observer la transition
  400. * 3 -> 2 cellules
  401. * uref : échelle de vitesse (cf. adimensionnement)
  402. * ampvit : facteur d'amplification pour le tracé des vitesses
  403. *
  404. 'SI' court ;
  405. Gr = 5.0D3 ; tref = (tg '+' td) '/' 2.0D0 ;
  406. 'SINON' ;
  407. Gr = 40.0D3 ; tref = tg ;
  408. 'FINSI' ;
  409. uref = (Gr '**' 0.5D0) ;
  410. *
  411. ** Numériques
  412. *
  413. * nbiter : nombre d'itérations
  414. * nptrc : fréquence pour le tracé des champs (.ps ou à l'écran)
  415. * fidt : fréquence d'affichage des messages à l'écran
  416. * alpha : multiplicateur du pas de temps
  417. * pour les éléments MACRO
  418. 'SI' court ;
  419. nbiter = 250 ; nptrc = 125 ; fidt = 50 ;
  420. 'SINON' ;
  421. nbiter = 15000 ; nptrc = 2500 ; fidt = 100 ;
  422. 'FINSI' ;
  423. alpha = 0.9D0 ;
  424. *
  425. ** Remplissage des tables
  426. *
  427. rv . 'INCO' . 'NU' = nu ;
  428. rv . 'INCO' . 'GB' = g '*' Gr ;
  429. rv . 'INCO' . 'TREF' = tref ;
  430. rv . 'INCO' . 'UREF' = uref ;
  431. rv . 'ALFA' = alpha ;
  432. rv . 'FIDT' = fidt ;
  433. rv . 'NPTRC' = nptrc ;
  434. rv . 'ITMA' = nbiter ;
  435. *
  436. **
  437. ***
  438. **** Exécution
  439. SUMMARY ;
  440. 'SI' inta ; 'OPTION' 'DONN' 5 ; 'FINSI' ;
  441. EXEC rv ;
  442. TABTP1= 'TEMPS' 'NOEC';
  443. thist . 'tpscpu' = (thist . 'tpscpu') '+' TABTP1.'TEMPS_CPU'.'INITIAL' ;
  444. 'SI' graph ; TRHIST thist ; 'FINSI' ;
  445. ****
  446. ***
  447. **
  448. *
  449. ** Le cas-test donne-t-il un résultat correct ??
  450. 'SI' court ;
  451. *
  452. ** Vérification de la centrosymétrie sur les vitesse
  453. *
  454. vit = (rv . 'INCO' . 'UN') ;
  455. tvit = vit 'TOURNER' 180.0D0 pmil ;
  456. vit = 'KCHT' $mt 'VECT' 'SOMMET' vit ;
  457. 'ELIMINATION' (('EXTRAIRE' tvit 'MAIL') 'ET' mt) egeom ;
  458. tvit = 'KCHT' $mt 'VECT' 'SOMMET' tvit ;
  459. dv = 'KOPS' vit '-' tvit ;
  460. critere1 = ('MAXIMUM' dv 'ABS') '/' uref ;
  461. * Valeur de critere1 au 2/10/97 : 1.718764099177966D-15
  462. limite1 = 1.0D-12 ;
  463. *
  464. ** Evolution vitesse verticale le long de la médiane
  465. *
  466. evvm = 'EVOL' 'CHPO' vit 'UY' median ;
  467. evym = 'EXTRAIRE' evvm 'ORDO' ;
  468. list (evym *1.e-6);
  469. *
  470. * Résultat obtenu le 2/10/97
  471. * correspondant à critere2 = 1.507288760336422D-16
  472. evvref = 'PROG' 0.0D0 -.2205372973655706D+02 -.1537657415971809D+02 -.9886959157032784D+01 -.4994589224716669D+01 -.1325630316341117D+01 .5065207872228873D+00 .9297558065189220D+00 .5908058903982639D+00 .2945842774751989D-13 -.5908058903982122D+00 -.9297558065189337D+00 -.5065207872229142D+00 .1325630316341034D+01 .4994589224716784D+01 .9886959157032821D+01 .1537657415971808D+02 .2205372973655705D+02 0.0D0 ;
  473. * Résultat obtenu le 15/06/2014
  474. evvref = 'PROG' -7.24189E-39 -22.049 -15.375 -9.8821 -4.9918 -1.3199 0.50926 0.93264 0.59143 -1.04084E-12 -0.59143 -0.93264 -0.50926 1.3199 4.9918 9.8821 15.375 22.049 7.24188E-39 ;
  475. critere2 = ('MAXIMUM' (evym '-' evvref) 'ABS') '/' uref ;
  476. limite2 = 1.0D-4 ;
  477. * pour tenir compte de l'affichage de 5 chiffres significatifs
  478. * Tps CPU (le 2/10/97) ; 1009 centièmes de secondes
  479. * (court = VRAI ; graph = FAUX ; inta = FAUX ;)
  480. TABTP1= 'TEMPS' 'NOEC';
  481. thist . 'tpscpu'= (thist . 'tpscpu') '+' TABTP1.'TEMPS_CPU'.'INITIAL';
  482. *
  483. ** Affichage des messages et des erreurs éventuelles
  484. *
  485. 'OPTION' 'ECHO' 1 ;
  486. 'SAUTER' 2 'LIGNE' ;
  487. 'MESSAGE' 'Debriefing :' ;
  488. 'MESSAGE' '------------' ;
  489. 'SAUTER' 'LIGNE' ;
  490. 'MESSAGE' ('CHAINE' 'Erreur/Limite de centrosymétrie du champ de vitesses :') ;
  491. 'MESSAGE' ('CHAINE' 'FORMAT' '(D24.16)' critere1 ' / ' limite1) ;
  492. 'MESSAGE' ('CHAINE' 'Erreur/Limite Vy sur la médiane horizontale') ;
  493. 'MESSAGE' ('CHAINE' 'FORMAT' '(D24.16)' critere2 ' / ' limite2) ;
  494. 'MESSAGE' ('CHAINE' 'Temps CPU / Temps CPU (30/9/97) : ') ;
  495. 'MESSAGE' ('CHAINE' ('ENTIER' (thist . 'tpscpu')) ' / ~1000' ' centième(s) de secondes') ;
  496. mess ' ->' critere1 ' 'limite1' 'critere2' 'limite2 ;
  497. 'SI' ('OU' (critere1 '>' limite1) (critere2 '>' limite2)) ;
  498. 'ERREUR' 5 ;
  499. 'FINSI' ;
  500. 'MESSAGE' 'Tout s_est bien passé' ;
  501. 'OPTION' 'ECHO' 1 ;
  502. 'FINSI' ;
  503. SUMMARY ;
  504. 'SI' inta ; 'OPTION' 'DONN' 5 ; 'FINSI' ;
  505. 'FIN' ;
  506. *
  507. ** Fin du 'main'
  508. **************************************************************
  509.  
  510.  
  511.  
  512.  
  513.  
  514.  
  515.  
  516.  
  517.  
  518.  
  519.  
  520.  
  521.  
  522.  
  523.  
  524.  
  525.  

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