Télécharger domall.dgibi

Retour à la liste

Numérotation des lignes :

  1. * fichier : domall.dgibi
  2. ************************************************************************
  3. ************************************************************************
  4. *
  5. **** Compatibility check
  6. *
  7. GRAPH = FAUX ;
  8. * CHECKERR to see the error messages.
  9. CHECKERR = FAUX ;
  10.  
  11. *
  12. **** Nothing from here
  13. *
  14. 'SI' FAUX ;
  15. *
  16. **** Till here
  17. *
  18. 'FINSI' ;
  19.  
  20. *****************************
  21. **** SEG3 in 2D *************
  22. *****************************
  23.  
  24. 'OPTION' 'DIME' 2 'ELEM' 'TRI3' ;
  25.  
  26. P1 = 1.11 0.0 ;
  27. P2 = 1.0 1.13 ;
  28.  
  29. MAIL = P1 'DROIT' 5 P2 ;
  30. *
  31. *
  32. MODM = 'MODELISER' MAIL 'EULER' ;
  33. TABM = 'DOMA' MODM 'VF' ;
  34. QMAIL = TABM . 'QUAF' ;
  35.  
  36.  
  37. 'SI' GRAPH ;
  38. 'TRACER' (MAIL 'ET' QMAIL) 'TITRE' 'QUAF' ;
  39. 'TRACER' ((tabm . 'MAILLAGE') et ((tabm . 'CENTRE') 'COUL' 'ROUGE'))
  40. 'TITRE' 'CENTRE et MAILLAGE';
  41. 'FINSI' ;
  42.  
  43. AA = 'DIFF' MAIL (TABM . 'MAILLAGE') ;
  44. 'SI' ('NEG' ('NBEL' AA) 0) ;
  45. 'MESSAGE' 'SEG3' ;
  46. 'ERREUR' 5 ;
  47. 'FINSI' ;
  48.  
  49. * Volume
  50.  
  51. VOL0 = 'PSCAL' (P2 'MOIN' P1) (P2 'MOIN' P1) ;
  52. VOL0 = VOL0 '**' 0.5 ;
  53. AA = 'MANUEL' 'CHPO' (TABM .'CENTRE') 1 'SCAL' 1.0 'NATU'
  54. 'DISCRETE' ;
  55. VOL1 = 'XTY' (TABM . 'XXVOLUM') AA ('MOTS' 'SCAL')
  56. ('MOTS' 'SCAL') ;
  57.  
  58. ERRO = (VOL0 '-' VOL1) 'ABS' ;
  59. 'SI' (ERRO > 1.0D-6) ;
  60. 'MESSAGE' 'SEG3' ;
  61. 'ERREUR' 5 ;
  62. 'FINSI' ;
  63.  
  64.  
  65. *****************************
  66. **** SEG3 in 3D *************
  67. *****************************
  68.  
  69. 'SI' CHECKERR ;
  70. 'OPTION' 'DIME' 3 'ELEM' 'TRI3' ;
  71.  
  72. P1 = 0.0 0.0 0.0 ;
  73. P2 = 1.0 0.0 0.0 ;
  74.  
  75. MAIL = P1 'DROIT' 1 P2 ;
  76. *
  77. *
  78. * QMAIL1 = QMAIL 'PLUS' (0.0 0.0) ;
  79. MODM = 'MODELISER' MAIL 'EULER' ;
  80. TABM = 'DOMA' MODM 'VF' ;
  81. 'FINSI' ;
  82.  
  83. *****************************
  84. **** TRI3 in 3D *************
  85. *****************************
  86.  
  87. 'OPTION' 'DIME' 3 'ELEM' 'TET4' ;
  88.  
  89. P1 = 0.0 0.0 0.0 ;
  90. P2 = 1.0 0.0 0.0 ;
  91. P3 = 1.11 1.13 0.0 ;
  92. P4 = 0.0 1.0 0.0 ;
  93.  
  94. P1 P2 P3 P4 = P1 P2 P3 P4 'TOURNER' 15.0
  95. (0.0 0.0 2.0) (1.1 1.1 2.0) ;
  96.  
  97. MAIL = 'DALL' (P1 'DROIT' 1 P2) (P2 'DROIT' 1 P3) (P3 'DROIT' 1 P4)
  98. (P4 'DROIT' 1 P1) 'PLAN' ;
  99. *
  100. MODM = 'MODELISER' MAIL 'EULER' ;
  101. TABM = 'DOMA' MODM 'VF' ;
  102. QMAIL = TABM . 'QUAF' ;
  103. *
  104. 'SI' GRAPH ;
  105. 'TRACER' (MAIL 'ET' QMAIL) 'TITRE' 'QUAF' ;
  106. 'TRACER' ((tabm . 'MAILLAGE') et ((tabm . 'CENTRE') 'COUL' 'ROUGE'))
  107. 'TITRE' 'CENTRE et MAILLAGE';
  108. 'FINSI' ;
  109. *
  110. AA = 'DIFF' MAIL (TABM . 'MAILLAGE') ;
  111. 'SI' ('NEG' ('NBEL' AA) 0) ;
  112. 'MESSAGE' 'TRI3' ;
  113. 'ERREUR' 5 ;
  114. 'FINSI' ;
  115.  
  116. * Volume
  117.  
  118. NN = 'NBEL' MAIL ;
  119. 'REPETER' BL1 NN ;
  120. AA = 'MESURE' ('ELEM' &BL1 MAIL) ;
  121. BB = 'EXTRAIRE' (TABM . 'XXVOLUM') 'SCAL'
  122. ('POIN' &BL1 (TABM . 'CENTRE')) ;
  123. 'LISTE' BB ;
  124. ERRO = (AA '-' BB) 'ABS' ;
  125. 'SI' (ERRO > 1.0D-6) ;
  126. 'MESSAGE' 'TRI3' ;
  127. 'ERREUR' 5 ;
  128. 'FINSI' ;
  129. 'FIN' BL1 ;
  130.  
  131. *****************************
  132. **** QUA4 in 3D *************
  133. *****************************
  134.  
  135. 'OPTION' 'DIME' 3 'ELEM' 'CUB8' ;
  136.  
  137. P1 = 0.0 0.0 0.0 ;
  138. P2 = 1.0 0.0 0.0 ;
  139. P3 = 1.11 1.13 0.0 ;
  140. P4 = 0.0 1.0 0.0 ;
  141.  
  142. P1 P2 P3 P4 = P1 P2 P3 P4 'TOURNER' 15.0
  143. (0.0 0.0 2.0) (1.1 1.1 2.0) ;
  144.  
  145. MAIL = 'DALL' (P1 'DROIT' 2 P2) (P2 'DROIT' 2 P3) (P3 'DROIT' 2 P4)
  146. (P4 'DROIT' 2 P1) 'PLAN' ;
  147. *
  148. MODM = 'MODELISER' MAIL 'EULER' ;
  149. TABM = 'DOMA' MODM 'VF' ;
  150. QMAIL = TABM . 'QUAF' ;
  151.  
  152. 'SI' GRAPH ;
  153. 'TRACER' (MAIL 'ET' QMAIL) 'TITRE' 'QUAF' ;
  154. 'TRACER' ((tabm . 'MAILLAGE') et ((tabm . 'CENTRE') 'COUL' 'ROUGE'))
  155. 'TITRE' 'CENTRE et MAILLAGE';
  156. 'FINSI' ;
  157. *
  158. AA = 'DIFF' MAIL (TABM . 'MAILLAGE') ;
  159. 'SI' ('NEG' ('NBEL' AA) 0) ;
  160. 'MESSAGE' 'QUA4' ;
  161. 'ERREUR' 5 ;
  162. 'FINSI' ;
  163.  
  164. * Volume
  165.  
  166. NN = 'NBEL' MAIL ;
  167. 'REPETER' BL1 NN ;
  168. *
  169. * NB If the elts are not in the same plane
  170. * 'MESURE' gives not the same results
  171. *
  172. AA = 'MESURE' ('ELEM' &BL1 MAIL) ;
  173. BB = 'EXTRAIRE' (TABM . 'XXVOLUM') 'SCAL'
  174. ('POIN' &BL1 (TABM . 'CENTRE')) ;
  175. ERRO = (AA '-' BB) 'ABS' ;
  176. 'SI' (ERRO > 1.0D-6) ;
  177. 'MESSAGE' 'QUA4' ;
  178. 'ERREUR' 21 ;
  179. 'FINSI' ;
  180. 'FIN' BL1 ;
  181.  
  182.  
  183. *****************************
  184. **** TRI3 and QUA4 in 3D ***
  185. *****************************
  186.  
  187.  
  188. 'OPTION' 'DIME' 3 'ELEM' 'TET4' ;
  189.  
  190. P1 = 0.0 0.0 0.0 ;
  191. P2 = 1.0 0.0 0.0 ;
  192. P3 = 1.11 1.13 0.0 ;
  193. P4 = 0.0 1.0 0.0 ;
  194. P5 = 0.0 2.0 0.0 ;
  195. P6 = 1.0 2.0 0.0 ;
  196.  
  197. MAIL1 = 'DALL' (P1 'DROIT' 2 P2) (P2 'DROIT' 2 P3) (P3 'DROIT' 2 P4)
  198. (P4 'DROIT' 2 P1) 'PLAN' ;
  199.  
  200. 'OPTION' 'ELEM' 'CUB8' ;
  201.  
  202. MAIL2 = 'SURF' ((P4 'DROIT' 3 P5) 'ET' (P5 'DROIT' 2 P6) 'ET'
  203. (P6 'DROIT' 2 P3) 'ET' (P3 'DROIT' 2 P4)) 'PLAN' ;
  204.  
  205. MAIL = MAIL1 'ET' MAIL2 ;
  206. 'ELIMINATION' MAIL 0.0001 ;
  207.  
  208. *
  209. MODM = 'MODELISER' MAIL 'EULER' ;
  210. TABM = 'DOMA' MODM 'VF' ;
  211. QMAIL = TABM . 'QUAF' ;
  212.  
  213. *
  214. 'SI' GRAPH ;
  215. 'TRACER' (MAIL 'ET' QMAIL) 'TITRE' 'QUAF' ;
  216. 'TRACER' ((tabm . 'MAILLAGE') et ((tabm . 'CENTRE') 'COUL' 'ROUGE'))
  217. 'TITRE' 'CENTRE et MAILLAGE';
  218. 'FINSI' ;
  219. *
  220. AA = 'DIFF' MAIL (TABM . 'MAILLAGE') ;
  221. 'SI' ('NEG' ('NBEL' AA) 0) ;
  222. 'MESSAGE' 'TRI3 et QUA4' ;
  223. 'ERREUR' 5 ;
  224. 'FINSI' ;
  225.  
  226. * Volume
  227.  
  228. MAIL = (TABM . 'MAILLAGE') ;
  229. TYPEL = MAIL 'ELEM' 'TYPE' ;
  230. NN0 = 'DIME' TYPEL ;
  231. NNE=0 ;
  232. 'REPETER' BL0 NN0 ;
  233. MAILA = MAIL 'ELEM' ('EXTRAIRE' TYPEL &BL0) ;
  234. NN = 'NBEL' MAILA ;
  235. 'REPETER' BL1 NN ;
  236. NNE = NNE '+' 1 ;
  237. *
  238. * NB If the elts are not on the same plane
  239. * 'MESURE' gives not the same results
  240. *
  241. AA = 'MESURE' ('ELEM' &BL1 MAILA) ;
  242. BB = 'EXTRAIRE' (TABM . 'XXVOLUM') 'SCAL'
  243. ('POIN' NNE (TABM . 'CENTRE')) ;
  244. ERRO = (AA '-' BB) 'ABS' ;
  245. 'SI' (ERRO > 1.0D-6) ;
  246. 'MESSAGE' 'TRI3 et QUA4' ;
  247. 'ERREUR' 21 ;
  248. 'FINSI' ;
  249. 'FIN' BL1 ;
  250. 'FIN' BL0 ;
  251.  
  252.  
  253. *****************************
  254. **** TRI3 in 2D *************
  255. *****************************
  256.  
  257. 'OPTION' 'DIME' 2 'ELEM' 'TRI3' ;
  258.  
  259. P1 = 0.0 0.0 ;
  260. P2 = 1.0 0.0 ;
  261. P3 = 1.11 1.13 ;
  262. P4 = 0.0 1.0 ;
  263.  
  264. MAIL = 'DALL' (P1 'DROIT' 1 P2) (P2 'DROIT' 1 P3) (P3 'DROIT' 1 P4)
  265. (P4 'DROIT' 1 P1) 'PLAN' ;
  266. *
  267. MODM = 'MODELISER' MAIL 'EULER' ;
  268. TABM = 'DOMA' MODM 'VF' ;
  269. QMAIL = TABM . 'QUAF' ;
  270.  
  271. *
  272. 'SI' GRAPH ;
  273. 'TRACER' (MAIL 'ET' QMAIL) 'TITRE' 'QUAF' ;
  274. 'TRACER' ((tabm . 'MAILLAGE') et ((tabm . 'CENTRE') 'COUL' 'ROUGE'))
  275. 'TITRE' 'CENTRE et MAILLAGE';
  276. VEC1 = 'VECTEUR' (TABM . 'XXNORMAF') 0.1 'UX' 'UY' 'ROUG' ;
  277. 'TRACER' MAIL VEC1 'TITRE' 'Normals' ;
  278. 'FINSI' ;
  279. *
  280. AA = 'DIFF' MAIL (TABM . 'MAILLAGE') ;
  281. 'SI' ('NEG' ('NBEL' AA) 0) ;
  282. 'MESSAGE' 'TRI3' ;
  283. 'ERREUR' 5 ;
  284. 'FINSI' ;
  285.  
  286. *****************************
  287. **** QUA4 bizarre in 2D *****
  288. *****************************
  289.  
  290. 'SI' CHECKERR ;
  291.  
  292. * Center of gravity outside the domain
  293.  
  294. 'OPTION' 'DIME' 2 'ELEM' 'QUA4' ;
  295.  
  296. P1 = 0.0 0.0 ;
  297. P2 = 1.0 0.0 ;
  298. P3 = 1.0 1.0 ;
  299. P4 = 0.75 0.1 ;
  300.  
  301. MAIL = 'DALL' (P1 'DROIT' 1 P2) (P2 'DROIT' 1 P3) (P3 'DROIT' 1 P4)
  302. (P4 'DROIT' 1 P1) 'PLAN' ;
  303. *
  304. MODM = 'MODELISER' MAIL 'EULER' ;
  305. TABM = 'DOMA' MODM 'VF' ;
  306.  
  307. 'FINSI' ;
  308.  
  309. *
  310. * Element with singular Jacobian allowed since
  311. * the center of gravity is inside of the elements
  312. * Clockwise orientation of the noeuds.
  313. *
  314.  
  315. 'OPTION' 'DIME' 2 'ELEM' 'QUA4' ;
  316.  
  317. P1 = 1.0 1.0 ;
  318. P2 = 1.0 0.0 ;
  319. P3 = 0.0 0.0 ;
  320. P4 = 0.5 0.35 ;
  321.  
  322. MAIL = 'MANUEL' 'QUA4' P1 P2 P3 P4 ;
  323. *
  324. MODM = 'MODELISER' MAIL 'EULER' ;
  325. TABM = 'DOMA' MODM 'VF' ;
  326. QMAIL = TABM . 'QUAF' ;
  327.  
  328. 'SI' GRAPH ;
  329. 'TRACER' (MAIL 'ET' QMAIL) 'TITRE' 'QUAF' ;
  330. 'TRACER' ((tabm . 'MAILLAGE') et
  331. ((tabm . 'CENTRE') 'COUL' 'ROUGE'))
  332. 'TITRE' 'CENTRE et MAILLAGE';
  333. VEC1 = 'VECTEUR' (TABM . 'XXNORMAF') 0.1 'UX' 'UY' 'ROUG' ;
  334. 'TRACER' MAIL VEC1 'TITRE' 'Normals' ;
  335. 'FINSI' ;
  336. *
  337. AA = 'DIFF' MAIL (TABM . 'MAILLAGE') ;
  338. 'SI' ('NEG' ('NBEL' AA) 0) ;
  339. 'MESSAGE' 'QUA4' ;
  340. 'ERREUR' 5 ;
  341. 'FINSI' ;
  342.  
  343. * Position of the center of gravity
  344.  
  345. VOL1 = 'MESURE' ('MANUEL' 'TRI3' P1 P2 P4) ;
  346. VOL2 = 'MESURE' ('MANUEL' 'TRI3' P2 P3 P4) ;
  347. PCEN1 = (P1 'PLUS' P2 'PLUS' P4) '/' 3. ;
  348. PCEN2 = (P2 'PLUS' P3 'PLUS' P4) '/' 3. ;
  349. PCEN = (VOL1 * PCEN1) 'PLUS' (VOL2 * PCEN2) ;
  350. PCEN = PCEN '/' (VOL1 '+' VOL2) ;
  351. 'ELIMINATION' ((TABM . CENTRE) 'ET' PCEN) 0.001 ;
  352. AA = 'DIFF' (TABM . CENTRE) ('MANUEL' 'POI1' PCEN) ;
  353. 'SI' ('NEG' ('NBEL' AA) 0) ;
  354. 'MESSAGE' 'QUA4' ;
  355. 'ERREUR' 5 ;
  356. 'FINSI' ;
  357.  
  358. * Volume
  359.  
  360. VOL = 'EXTRAIRE' (TABM . 'XXVOLUM') PCEN 'SCAL' ;
  361. ERRO = (VOL '-' (VOL1 '+' VOL2)) 'ABS' ;
  362.  
  363. 'SI' (ERRO > 1.0D-6) ;
  364. 'MESSAGE' 'TRI3 et QUA4' ;
  365. 'ERREUR' 21 ;
  366. 'FINSI' ;
  367.  
  368. * Normals
  369.  
  370. XP1 = 'COORDONNEE' 1 P1 ;
  371. YP1 = 'COORDONNEE' 2 P1 ;
  372. XP2 = 'COORDONNEE' 1 P2 ;
  373. YP2 = 'COORDONNEE' 2 P2 ;
  374. PCEN3 = (P1 'PLUS' P2) '/' 2 ;
  375. 'ELIMINATION' ((TABM . 'FACE') 'ET' PCEN3) 0.001 ;
  376.  
  377. VAL = (((XP1 '-' XP2) '**' 2) '+' ((YP2 '-' YP1) '**' 2)) '**' 0.5 ;
  378. VALNOR1 = 'MANUEL' 'CHPO' ('MANUEL' 'POI1' PCEN3) 2 'UX'
  379. ((YP1 '-' YP2) '/' VAL) 'UY' ((XP2 '-' XP1) '/' VAL) ;
  380. VALNOR2 = 'REDU' (TABM . 'XXNORMAF') ('MANUEL' 'POI1' PCEN3) ;
  381. ERRO = 'MAXIMUM' (VALNOR1 '-' VALNOR2) 'ABS' ;
  382. 'SI' (ERRO > 1.0D-12) ;
  383. 'ERREUR' ('CHAIN' 'Problem ' ('VALEUR' 'ELEM')) ;
  384. 'FINSI' ;
  385.  
  386. *
  387. * We check that the sum of (normals times surfaces) is zero
  388. *
  389.  
  390. VALNOR = TABM . 'XXNORMAF' ;
  391. VALSUR = TABM . 'XXSURFAC' ;
  392.  
  393. AA = VALNOR '*' VALSUR ;
  394. BB = 'MANUEL' 'CHPO' (TABM . 'FACE') 1 'SCAL' 1.0 ;
  395. ERRO = 'XTY' AA BB ('MOTS' 'UX' 'UY') ('MOTS' 'SCAL' 'SCAL') ;
  396. 'SI' (ERRO > 1.0D-12) ;
  397. 'ERREUR' ('CHAIN' 'Problem ' ('VALEUR' 'ELEM')) ;
  398. 'FINSI' ;
  399.  
  400. *
  401. * We check that the normals modulus are 1
  402. *
  403.  
  404. AA = 'PSCAL' VALNOR VALNOR ('MOTS' 'UX' 'UY') ('MOTS' 'UX' 'UY') ;
  405. 'SI' ((('MAXIMUM' AA) 'NEG' 1.0 1.0D-12) 'OU'
  406. (('MINIMUM' AA) 'NEG' 1.0 1.0D-12)) ;
  407. 'ERREUR' ('CHAIN' 'Problem QUA4') ;
  408. 'FINSI' ;
  409.  
  410. *
  411. * Matrot
  412. *
  413.  
  414. AA = 'EXCO' (TABM . 'MATROT') ('MOTS' 'MX' 'MY')
  415. ('MOTS' 'UX' 'UY') ;
  416. ERRO ='MAXIMUM' (AA '-' (TABM . 'XXNORMAF')) 'ABS' ;
  417. 'SI' (ERRO > 1.0D-12) ;
  418. 'ERREUR' ('CHAIN' 'Problem ' ('VALEUR' 'ELEM')) ;
  419. 'FINSI' ;
  420. *
  421. BB = 'EXCO' (TABM . 'MATROT') ('MOTS' 'RX' 'RY')
  422. ('MOTS' 'UX' 'UY') ;
  423. ERRO = 'MAXIMUM' ('PSCAL' AA BB ('MOTS' 'UX' 'UY') ('MOTS' 'UX' 'UY'))
  424. 'ABS' ;
  425. 'SI' (ERRO > 1.0D-12) ;
  426. 'ERREUR' ('CHAIN' 'Problem ' ('VALEUR' 'ELEM')) ;
  427. 'FINSI' ;
  428. * Vector product
  429. COMPZ = 'PSCAL' AA BB ('MOTS' 'UX') ('MOTS' 'UY') ;
  430. COMPZ = COMPZ '-' ('PSCAL' AA BB ('MOTS' 'UY') ('MOTS' 'UX')) ;
  431. ERRO = 'MAXIMUM' (COMPZ '-' 1.) 'ABS' ;
  432. 'SI' (ERRO > 1.0D-12) ;
  433. 'ERREUR' ('CHAIN' 'Problem ' ('VALEUR' 'ELEM')) ;
  434. 'FINSI' ;
  435.  
  436.  
  437. *****************************
  438. **** QUA4 in 2D *************
  439. *****************************
  440.  
  441. 'OPTION' 'DIME' 2 'ELEM' 'QUA4' ;
  442.  
  443. P1 = 0.0 0.0 ;
  444. P2 = 1.0 0.0 ;
  445. P3 = 1.11 1.13 ;
  446. P4 = 0.0 1.0 ;
  447.  
  448. MAIL = 'DALL' (P1 'DROIT' 2 P2) (P2 'DROIT' 2 P3) (P3 'DROIT' 2 P4)
  449. (P4 'DROIT' 2 P1) 'PLAN' ;
  450. *
  451. MODM = 'MODELISER' MAIL 'EULER' ;
  452. TABM = 'DOMA' MODM 'VF' ; QMAIL = TABM . 'QUAF' ;
  453.  
  454.  
  455. 'SI' GRAPH ;
  456. 'TRACER' (MAIL 'ET' QMAIL) 'TITRE' 'QUAF' ;
  457. 'TRACER' ((tabm . 'MAILLAGE') et ((tabm . 'CENTRE') 'COUL' 'ROUGE'))
  458. 'TITRE' 'CENTRE et MAILLAGE';
  459. VEC1 = 'VECTEUR' (TABM . 'XXNORMAF') 0.1 'UX' 'UY' 'ROUG' ;
  460. 'TRACER' MAIL VEC1 'TITRE' 'Normals' ;
  461. 'FINSI' ;
  462. *
  463. AA = 'DIFF' MAIL (TABM . 'MAILLAGE') ;
  464. 'SI' ('NEG' ('NBEL' AA) 0) ;
  465. 'MESSAGE' 'QUA4' ;
  466. 'ERREUR' 5 ;
  467. 'FINSI' ;
  468.  
  469. *****************************
  470. **** TRI3 and QUA4 in 2D ***
  471. *****************************
  472.  
  473.  
  474. 'OPTION' 'DIME' 2 'ELEM' 'TRI3' ;
  475.  
  476. P1 = 0.0 0.0 ;
  477. P2 = 1.0 0.0 ;
  478. P3 = 1.11 1.13 ;
  479. P4 = 0.0 1.0 ;
  480. P5 = 0.0 2.0 ;
  481. P6 = 1.0 2.0 ;
  482.  
  483. MAIL1 = 'DALL' (P1 'DROIT' 2 P2) (P2 'DROIT' 2 P3) (P3 'DROIT' 2 P4)
  484. (P4 'DROIT' 2 P1) 'PLAN' ;
  485. 'OPTION' 'ELEM' 'QUA4' ;
  486. MAIL2 = 'SURF' ((P4 'DROIT' 3 P5) 'ET' (P5 'DROIT' 2 P6) 'ET'
  487. (P6 'DROIT' 2 P3) 'ET' (P3 'DROIT' 2 P4)) 'PLAN' ;
  488.  
  489. MAIL = MAIL1 'ET' MAIL2 ;
  490. 'ELIMINATION' MAIL 0.0001 ;
  491.  
  492. MODM = 'MODELISER' MAIL 'EULER' ;
  493. TABM = 'DOMA' MODM 'VF ' ;
  494. QMAIL = TABM . 'QUAF' ;
  495. *
  496. 'SI' GRAPH ;
  497. 'TRACER' (MAIL 'ET' QMAIL) 'TITRE' 'QUAF' ;
  498. 'TRACER' ((tabm . 'MAILLAGE') et ((tabm . 'CENTRE') 'COUL' 'ROUGE'))
  499. 'TITRE' 'CENTRE et MAILLAGE';
  500. VEC1 = 'VECTEUR' (TABM . 'XXNORMAF') 0.1 'UX' 'UY' 'ROUG' ;
  501. 'TRACER' MAIL VEC1 'TITRE' 'Normals' ;
  502. 'FINSI' ;
  503. *
  504. AA = 'DIFF' MAIL (TABM . 'MAILLAGE') ;
  505. 'SI' ('NEG' ('NBEL' AA) 0) ;
  506. 'MESSAGE' 'TRI3 et QUA4' ;
  507. 'ERREUR' 5 ;
  508. 'FINSI' ;
  509.  
  510. * Volume
  511.  
  512. MAIL = (TABM . 'MAILLAGE') ;
  513. TYPEL = MAIL 'ELEM' 'TYPE' ;
  514. NN0 = 'DIME' TYPEL ;
  515. NNE=0 ;
  516. 'REPETER' BL0 NN0 ;
  517. MAILA = MAIL 'ELEM' ('EXTRAIRE' TYPEL &BL0) ;
  518. NN = 'NBEL' MAILA ;
  519. 'REPETER' BL1 NN ;
  520. NNE = NNE '+' 1 ;
  521. AA = 'MESURE' ('ELEM' &BL1 MAILA) ;
  522. BB = 'EXTRAIRE' (TABM . 'XXVOLUM') 'SCAL'
  523. ('POIN' NNE (TABM . 'CENTRE')) ;
  524. ERRO = (AA '-' BB) 'ABS' ;
  525. 'SI' (ERRO > 1.0D-6) ;
  526. 'MESSAGE' 'TRI3 et QUA4' ;
  527. 'ERREUR' 21 ;
  528. 'FINSI' ;
  529. 'FIN' BL1 ;
  530. 'FIN' BL0 ;
  531.  
  532. * Sommet
  533.  
  534. MAILS = 'CHANGER' MAIL 'POI1' ;
  535. AA = 'DIFF' MAILS (TABM . 'SOMMET') ;
  536. 'SI' (('NBNO' AA) > 0 ) ;
  537. 'MESSAGE' 'TRI3 et QUA4' ;
  538. 'ERREUR' 21 ;
  539. 'FINSI' ;
  540.  
  541. * Comparaison complete 'NAVIER_STOKES' - 'EULER'
  542.  
  543. MOD2 = 'MODELISER' QMAIL 'NAVIER_STOKES' 'LINE' ;
  544. TAB2 = 'DOMA' MOD2 'TABLE' ;
  545. TAB2 . 'PRECONDI' = 1 ;
  546.  
  547. AA = 'DIFF' (TAB2 . 'QUAF') (TABM . 'QUAF') ;
  548. 'SI' (('NBNO' AA) > 0 ) ;
  549. 'MESSAGE' 'TRI3 et QUA4' ;
  550. 'ERREUR' 21 ;
  551. 'FINSI' ;
  552.  
  553. AA = 'DIFF' (TAB2 . 'MAILLAGE') (TABM . 'MAILLAGE') ;
  554. 'SI' (('NBNO' AA) > 0 ) ;
  555. 'MESSAGE' 'TRI3 et QUA4' ;
  556. 'ERREUR' 21 ;
  557. 'FINSI' ;
  558.  
  559. AA = 'DIFF' (TAB2 . 'CENTRE') (TABM . 'CENTRE') ;
  560. 'SI' (('NBNO' AA) > 0 ) ;
  561. 'MESSAGE' 'TRI3 et QUA4' ;
  562. 'ERREUR' 21 ;
  563. 'FINSI' ;
  564.  
  565. AA = 'DIFF' (TAB2 . 'SOMMET') (TABM . 'SOMMET') ;
  566. 'SI' (('NBNO' AA) > 0 ) ;
  567. 'MESSAGE' 'TRI3 et QUA4' ;
  568. 'ERREUR' 21 ;
  569. 'FINSI' ;
  570.  
  571. AA = 'DIFF' (TAB2 . 'FACEL') (TABM . 'FACEL') ;
  572. 'SI' (('NBNO' AA) > 0 ) ;
  573. 'MESSAGE' 'TRI3 et QUA4' ;
  574. 'ERREUR' 21 ;
  575. 'FINSI' ;
  576.  
  577. AA = 'DIFF' (TAB2 . 'FACEP') (TABM . 'FACEP') ;
  578. 'SI' (('NBNO' AA) > 0 ) ;
  579. 'MESSAGE' 'TRI3 et QUA4' ;
  580. 'ERREUR' 21 ;
  581. 'FINSI' ;
  582.  
  583. AA = 'DIFF' (TAB2 . 'ELTFA') (TABM . 'ELTFA') ;
  584. 'SI' (('NBNO' AA) > 0 ) ;
  585. 'MESSAGE' 'TRI3 et QUA4' ;
  586. 'ERREUR' 21 ;
  587. 'FINSI' ;
  588.  
  589. * XXSURFAC, XXNORMAF, XXDIEMIN (comparaison 'NAVIER_STOKES' - 'EULER')
  590.  
  591. CHPO1 = 'DOMA' TAB2 'XXSURFAC' ;
  592. CHPO2 = TABM . 'XXSURFAC' ;
  593. ERRO = 'MAXIMUM' (CHPO1 '-' CHPO2) 'ABS' ;
  594. 'SI' (ERRO > 1.0D-6) ;
  595. 'MESSAGE' 'TRI3 et QUA4' ;
  596. 'ERREUR' 21 ;
  597. 'FINSI' ;
  598.  
  599. CHPO1 = 'DOMA' TAB2 'XXVOLUM' ;
  600. CHPO2 = TABM . 'XXVOLUM' ;
  601. ERRO = 'MAXIMUM' (CHPO1 '-' CHPO2) 'ABS' ;
  602. 'SI' (ERRO > 1.0D-6) ;
  603. 'MESSAGE' 'TRI3 et QUA4' ;
  604. 'ERREUR' 21 ;
  605. 'FINSI' ;
  606.  
  607. CHPO1 = 'ABS' (TABM . 'XXNORMAF') ;
  608. CHPO2 = 'ABS' ('DOMA' TAB2 'XXNORMAF') ;
  609. ERRO = 'MAXIMUM' (CHPO1 '-' CHPO2) 'ABS' ;
  610. 'SI' (ERRO > 1.0D-6) ;
  611. 'MESSAGE' 'TRI3 et QUA4' ;
  612. 'ERREUR' 21 ;
  613. 'FINSI' ;
  614.  
  615. CHPO1 = (TABM . 'XXDIEMIN') ;
  616. CHPO2 = ('DOMA' TAB2 'XXDIEMIN') ;
  617. ERRO = 'MAXIMUM' (CHPO1 '-' CHPO2) 'ABS' ;
  618. 'SI' (ERRO > 1.0D-6) ;
  619. 'MESSAGE' 'TRI3 et QUA4' ;
  620. 'ERREUR' 21 ;
  621. 'FINSI' ;
  622.  
  623. *
  624. * We check that the sum of (normals times surfaces) is zero
  625. * on the border
  626. *
  627.  
  628. AA = 'CONTOUR' MAIL ;
  629. CC = 'MODELISER' AA 'EULER' ;
  630. TT = 'DOMA' CC 'VF' ;
  631. BB = TT. 'QUAF' ;
  632.  
  633. 'ELIMINATION' BB (TABM . 'QUAF') 0.0001 ;
  634. DD = TT . 'CENTRE' ;
  635.  
  636. VALNOR = 'REDU' (TABM . 'XXNORMAF') DD ;
  637. VALSUR = 'REDU' (TABM . 'XXSURFAC') DD ;
  638.  
  639. AA = VALNOR '*' VALSUR ;
  640. BB = 'MANUEL' 'CHPO' DD 1 'SCAL' 1.0 ;
  641. ERRO = 'XTY' AA BB ('MOTS' 'UX' 'UY') ('MOTS' 'SCAL' 'SCAL') ;
  642. 'SI' (ERRO > 1.0D-12) ;
  643. 'ERREUR' 'TRI3 et QUA4' ;
  644. 'FINSI' ;
  645.  
  646. *
  647. * We check that each element satisfies the property
  648. * (normals times surfaces) = zero
  649. *
  650. * ELTFA and MAIL have the same structure
  651. *
  652. LISTYP = (TABM . 'ELTFA') 'ELEM' 'TYPE' ;
  653. LISTYP1 = (TABM . 'QUAF') 'ELEM' 'TYPE' ;
  654. *
  655. NELEM = 0 ;
  656. 'REPETER' BL1 ('DIME' LISTYP) ;
  657. MAIL1 = 'ELEM' (TABM . 'ELTFA') ('EXTRAIRE' LISTYP &BL1) ;
  658. MAIL2 = 'ELEM' (TABM . 'QUAF') ('EXTRAIRE' LISTYP1 &BL1) ;
  659. NM1 = 'NBEL' MAIL1 ;
  660. NM2 = 'NBEL' MAIL2 ;
  661. 'SI' ('NEG' NM1 NM2) ;
  662. 'ERREUR' 'QUAF and ELTFA non compatible' ;
  663. 'ERREUR' 21 ;
  664. 'FINSI' ;
  665. 'REPETER' BL2 ('NBEL' MAIL1) ;
  666. NELEM = NELEM '+' 1 ;
  667. ELE1 = 'ELEM' MAIL1 &BL2 ;
  668. ELE2 = 'CHANGER' ELE1 'POI1' ;
  669. NM2 = 'NBNO' ELE2 ;
  670. ELE3 = 'ELEM' MAIL2 &BL2 ;
  671. ELE4 = 'CHANGER' ELE3 'POI1' ;
  672. NM4 = 'NBNO' ELE4 ;
  673. ELE5 = 'DIFF' ELE4 ELE2 ;
  674. NM5 = 'NBNO' ELE5 ;
  675. 'SI' ('NEG' (NM2 '+' NM5) NM4) ;
  676. 'ERREUR' 'QUAF and ELTFA non compatible' ;
  677. 'ERREUR' 21 ;
  678. 'FINSI' ;
  679. PCEN = 'POIN' (TABM . 'CENTRE') NELEM ;
  680. DSURF = 0.0 0.0 ;
  681. 'REPETER' BL3 ('NBEL' ELE2) ;
  682. PFAC = 'POIN' &BL3 ELE2 ;
  683. SURFF = 'EXTRAIRE' (TABM . 'XXSURFAC') 'SCAL' PFAC ;
  684. PNORM = ('EXTRAIRE' (TABM . 'XXNORMAF') 'UX' PFAC)
  685. ('EXTRAIRE' (TABM . 'XXNORMAF') 'UY' PFAC);
  686. PCF = PFAC 'MOIN' PCEN ;
  687. DORIE = 'SIGNE' ('PSCAL' PNORM PCF) ;
  688. DSURF = DSURF 'PLUS' (DORIE * PNORM * SURFF) ;
  689. 'FIN' BL3 ;
  690. AA = 'MAXIMUM' ('ABS' ('PROG' ('COORDONNEE' 1 DSURF)
  691. ('COORDONNEE' 2 DSURF) ('COORDONNEE' 3 DSURF))) ;
  692. 'SI' (AA > 1.0D-12) ;
  693. 'MESSAGE' 'GENE' ;
  694. 'ERREUR' 21 ;
  695. 'FINSI' ;
  696. 'FIN' BL2 ;
  697. 'FIN' BL1 ;
  698.  
  699. *
  700. ******************************
  701. **** TET4 ********************
  702. ******************************
  703. *
  704. 'OPTION' 'DIME' 3 'ELEM' 'TET4' ;
  705. * P1, P2, P3 clockwise
  706. P1 = 1.0 0.0 0.0 ;
  707. P2 = 0.0 0.0 0.0 ;
  708. P3 = 1.11 1.13 0.0 ;
  709. P4 = -0.11 1.73 1.11 ;
  710. P1 P2 P3 P4 = P1 P2 P3 P4 'TOURNER' 15.0
  711. (0.0 0.0 2.0) (1.1 1.1 2.0) ;
  712. PCEN = P1 'PLUS' P2 'PLUS' P3 'PLUS' P4 ;
  713. PCEN = PCEN '/' 4. ;
  714. MAIL = 'MANUEL' 'TET4' P1 P2 P3 P4 ;
  715. *
  716. MODM = 'MODELISER' MAIL 'EULER' ;
  717. TABM = 'DOMA' MODM 'VF' ; QMAIL = TABM . 'QUAF' ;
  718. VALNOR = TABM . 'XXNORMAF' ;
  719. VALSUR = TABM . 'XXSURFAC' ;
  720. *
  721. 'SI' GRAPH ;
  722. 'TRACER' (MAIL 'ET' QMAIL) 'TITRE' 'QUAF' ;
  723. 'TRACER' ((tabm . 'MAILLAGE') et ((tabm . 'CENTRE') 'COUL' 'ROUGE'))
  724. 'TITRE' 'CENTRE et MAILLAGE';
  725. VEC1 = 'VECTEUR' (TABM . 'XXNORMAF') 0.1 'UX' 'UY' 'UZ' 'ROUG' ;
  726. 'TRACER' MAIL VEC1 'TITRE' 'Normals' ;
  727. 'FINSI' ;
  728. *
  729. AA = 'DIFF' MAIL (TABM . 'MAILLAGE') ;
  730. 'SI' ('NEG' ('NBEL' AA) 0) ;
  731. 'MESSAGE' 'TET4' ;
  732. 'ERREUR' 5 ;
  733. 'FINSI' ;
  734. 'ELIMINATION' ((TABM. 'CENTRE') 'ET' PCEN) 0.0001 ;
  735. AA = 'DIFF' ('MANUEL' 'POI1' PCEN) (TABM. 'CENTRE') ;
  736. 'SI' ('NEG' ('NBEL' AA) 0) ;
  737. 'MESSAGE' 'TET4' ;
  738. 'ERREUR' 5 ;
  739. 'FINSI' ;
  740.  
  741. * Volume
  742.  
  743. NN = 'NBEL' MAIL ;
  744. 'REPETER' BL1 NN ;
  745. AA = 'MESURE' ('ELEM' &BL1 MAIL) ;
  746. BB = 'EXTRAIRE' (TABM . 'XXVOLUM') 'SCAL'
  747. ('POIN' &BL1 (TABM . 'CENTRE')) ;
  748. ERRO = (AA '-' BB) 'ABS' ;
  749. 'SI' (ERRO > 1.0D-6) ;
  750. 'MESSAGE' 'TET4' ;
  751. 'ERREUR' 21 ;
  752. 'FINSI' ;
  753. 'FIN' BL1 ;
  754.  
  755. * Sommet
  756.  
  757. MAILS = 'CHANGER' MAIL 'POI1' ;
  758. AA = 'DIFF' MAILS (TABM . 'SOMMET') ;
  759. 'SI' (('NBNO' AA) > 0 ) ;
  760. 'MESSAGE' 'TET4' ;
  761. 'ERREUR' 21 ;
  762. 'FINSI' ;
  763.  
  764. * Comparaison complete 'NAVIER_STOKES' - 'EULER'
  765.  
  766. MOD2 = 'MODELISER' QMAIL 'NAVIER_STOKES' 'LINE' ;
  767. TAB2 = 'DOMA' MOD2 'TABLE' ;
  768. TAB2 . 'PRECONDI' = 1 ;
  769.  
  770. AA = 'DIFF' (TAB2 . 'QUAF') (TABM . 'QUAF') ;
  771. 'SI' (('NBNO' AA) > 0 ) ;
  772. 'MESSAGE' 'TRI3 et QUA4' ;
  773. 'ERREUR' 21 ;
  774. 'FINSI' ;
  775.  
  776. AA = 'DIFF' (TAB2 . 'MAILLAGE') (TABM . 'MAILLAGE') ;
  777. 'SI' (('NBNO' AA) > 0 ) ;
  778. 'MESSAGE' 'TRI3 et QUA4' ;
  779. 'ERREUR' 21 ;
  780. 'FINSI' ;
  781.  
  782. AA = 'DIFF' (TAB2 . 'CENTRE') (TABM . 'CENTRE') ;
  783. 'SI' (('NBNO' AA) > 0 ) ;
  784. 'MESSAGE' 'TRI3 et QUA4' ;
  785. 'ERREUR' 21 ;
  786. 'FINSI' ;
  787.  
  788. AA = 'DIFF' (TAB2 . 'SOMMET') (TABM . 'SOMMET') ;
  789. 'SI' (('NBNO' AA) > 0 ) ;
  790. 'MESSAGE' 'TRI3 et QUA4' ;
  791. 'ERREUR' 21 ;
  792. 'FINSI' ;
  793.  
  794. AA = 'DIFF' (TAB2 . 'FACEL') (TABM . 'FACEL') ;
  795. 'SI' (('NBNO' AA) > 0 ) ;
  796. 'MESSAGE' 'TRI3 et QUA4' ;
  797. 'ERREUR' 21 ;
  798. 'FINSI' ;
  799.  
  800. AA = 'DIFF' (TAB2 . 'FACEP') (TABM . 'FACEP') ;
  801. 'SI' (('NBNO' AA) > 0 ) ;
  802. 'MESSAGE' 'TRI3 et QUA4' ;
  803. 'ERREUR' 21 ;
  804. 'FINSI' ;
  805.  
  806. AA = 'DIFF' (TAB2 . 'ELTFA') (TABM . 'ELTFA') ;
  807. 'SI' (('NBNO' AA) > 0 ) ;
  808. 'MESSAGE' 'TRI3 et QUA4' ;
  809. 'ERREUR' 21 ;
  810. 'FINSI' ;
  811.  
  812. * XXSURFAC, XXNORMAF, XXDIEMIN (comparaison 'NAVIER_STOKES' - 'EULER')
  813.  
  814. CHPO1 = 'DOMA' TAB2 'XXSURFAC' ;
  815. CHPO2 = TABM . 'XXSURFAC' ;
  816. ERRO = 'MAXIMUM' (CHPO1 '-' CHPO2) 'ABS' ;
  817. 'SI' (ERRO > 1.0D-6) ;
  818. 'MESSAGE' 'TRI3 et QUA4' ;
  819. 'ERREUR' 21 ;
  820. 'FINSI' ;
  821.  
  822. CHPO1 = 'DOMA' TAB2 'XXVOLUM' ;
  823. CHPO2 = TABM . 'XXVOLUM' ;
  824. ERRO = 'MAXIMUM' (CHPO1 '-' CHPO2) 'ABS' ;
  825. 'SI' (ERRO > 1.0D-6) ;
  826. 'MESSAGE' 'TRI3 et QUA4' ;
  827. 'ERREUR' 21 ;
  828. 'FINSI' ;
  829.  
  830. CHPO1 = 'ABS' (TABM . 'XXNORMAF') ;
  831. CHPO2 = 'ABS' ('DOMA' TAB2 'XXNORMAF') ;
  832. ERRO = 'MAXIMUM' (CHPO1 '-' CHPO2) 'ABS' ;
  833. 'SI' (ERRO > 1.0D-6) ;
  834. 'MESSAGE' 'TRI3 et QUA4' ;
  835. 'ERREUR' 21 ;
  836. 'FINSI' ;
  837.  
  838. CHPO1 = (TABM . 'XXDIEMIN') ;
  839. CHPO2 = ('DOMA' TAB2 'XXDIEMIN') ;
  840. ERRO = 'MAXIMUM' (CHPO1 '-' CHPO2) 'ABS' ;
  841. 'SI' (ERRO > 1.0D-6) ;
  842. 'MESSAGE' 'TRI3 et QUA4' ;
  843. 'ERREUR' 21 ;
  844. 'FINSI' ;
  845.  
  846. *
  847. * We check the interfaces
  848. *
  849.  
  850. PCEN1 = (P1 'PLUS' P2 'PLUS' P3) '/' 3. ;
  851. PCEN2 = (P2 'PLUS' P3 'PLUS' P4) '/' 3. ;
  852. PCEN3 = (P3 'PLUS' P4 'PLUS' P1) '/' 3. ;
  853. PCEN4 = (P4 'PLUS' P1 'PLUS' P2) '/' 3. ;
  854. *
  855. A1 = 'PVECT' (P2 'MOIN' P1) (P3 'MOIN' P1) ;
  856. A2 = 'PVECT' (P3 'MOIN' P2) (P4 'MOIN' P2) ;
  857. A3 = 'PVECT' (P4 'MOIN' P3) (P1 'MOIN' P3) ;
  858. A4 = 'PVECT' (P1 'MOIN' P4) (P2 'MOIN' P4) ;
  859. VALSUR1 = 'PROG' ('PSCAL' A1 A1) ('PSCAL' A2 A2)
  860. ('PSCAL' A3 A3) ('PSCAL' A4 A4) ;
  861. VALSUR1 = VALSUR1 '**' 0.5 ;
  862. VALSUR1 = VALSUR1 '*' 0.5 ;
  863. VALSURM = 'MANUEL' 'QUA4' PCEN1 PCEN2 PCEN3 PCEN4 ;
  864. 'ELIMINATION' VALSURM 0.001 (TABM . 'FACE') ;
  865. VALSUR2 = 'MANUEL' 'CHPO' (CHAN 'POI1' VALSURM) 1 'SCAL' VALSUR1 ;
  866. ERRO = 'MAXI' (VALSUR '-' VALSUR2) 'ABS' ;
  867. 'SI' (ERRO > 1.0D-6) ;
  868. 'ERREUR' ('CHAIN' 'Problem ' ('VALEUR' 'ELEM')) ;
  869. 'FINSI' ;
  870. *
  871. * We check that the normals modulus are 1
  872. *
  873. AA = 'PSCAL' VALNOR VALNOR ('MOTS' 'UX' 'UY' 'UZ')
  874. ('MOTS' 'UX' 'UY' 'UZ') ;
  875. 'SI' ((('MAXIMUM' AA) 'NEG' 1.0 1.0D-12) 'OU'
  876. (('MINIMUM' AA) 'NEG' 1.0 1.0D-12)) ;
  877. 'ERREUR' ('CHAIN' 'Problem ' ('VALEUR' 'ELEM')) ;
  878. 'FINSI' ;
  879. *
  880. * We check the normal in one face (P1, P2, P4)
  881. *
  882. VECNOR1 = 'PVEC' (P4 'MOIN' P1) (P2 'MOIN' P1) ;
  883. VECNOR1 = VECNOR1 '/' (('PSCAL' VECNOR1 VECNOR1) '**' 0.5) ;
  884. VALNOR1 = 'MANUEL' 'CHPO' ('MANUEL' 'POI1' PCEN4) 3
  885. 'UX' ('COORDONNEE' 1 VECNOR1)
  886. 'UY' ('COORDONNEE' 2 VECNOR1)
  887. 'UZ' ('COORDONNEE' 3 VECNOR1)
  888. ;
  889. ERRO = 'MAXI' (VALNOR1 '-' ('REDU' VALNOR ('MANUEL' 'POI1' PCEN4)))
  890. 'ABS' ;
  891. 'SI' (ERRO > 1.0D-6) ;
  892. 'ERREUR' ('CHAIN' 'Problem ' ('VALEUR' 'ELEM')) ;
  893. 'FINSI' ;
  894. *
  895. * We check that the sum of (normals times surfaces) is zero
  896. *
  897. AA = VALNOR '*' VALSUR ;
  898. BB = 'MANUEL' 'CHPO' (TABM . 'FACE') 1 'SCAL' 1.0 ;
  899. ERRO = 'XTY' AA BB ('MOTS' 'UX' 'UY' 'UZ')
  900. ('MOTS' 'SCAL' 'SCAL' 'SCAL') ;
  901. 'SI' (ERRO > 1.0D-12) ;
  902. 'ERREUR' ('CHAIN' 'Problem ' ('VALEUR' 'ELEM')) ;
  903. 'FINSI' ;
  904.  
  905. *
  906. * Matrot
  907. *
  908. AA = 'EXCO' (TABM . 'MATROT') ('MOTS' 'MX' 'MY' 'MZ')
  909. ('MOTS' 'UX' 'UY' 'UZ') ;
  910. ERRO ='MAXIMUM' (AA '-' (TABM . 'XXNORMAF')) 'ABS' ;
  911. 'SI' (ERRO > 1.0D-12) ;
  912. 'ERREUR' ('CHAIN' 'Problem ' ('VALEUR' 'ELEM')) ;
  913. 'FINSI' ;
  914. *
  915. BB = 'EXCO' (TABM . 'MATROT') ('MOTS' 'RX' 'RY' 'RZ')
  916. ('MOTS' 'UX' 'UY' 'UZ') ;
  917. ERRO = 'MAXIMUM' ('PSCAL' AA BB ('MOTS' 'UX' 'UY' 'UZ')
  918. ('MOTS' 'UX' 'UY' 'UZ'))
  919. 'ABS' ;
  920. 'SI' (ERRO > 1.0D-12) ;
  921. 'ERREUR' ('CHAIN' 'Problem ' ('VALEUR' 'ELEM')) ;
  922. 'FINSI' ;
  923. *
  924. COMPZ = 'PSCAL' AA BB ('MOTS' 'UX') ('MOTS' 'UY') ;
  925. COMPZ = COMPZ '-' ('PSCAL' AA BB ('MOTS' 'UY') ('MOTS' 'UX')) ;
  926. COMPZ1 = 'EXCO' (TABM . 'MATROT') ('MOTS' 'UZ')
  927. ('MOTS' 'SCAL') ;
  928. ERRO = 'MAXIMUM' (COMPZ '-' COMPZ1) 'ABS' ;
  929. 'SI' (ERRO > 1.0D-12) ;
  930. 'ERREUR' ('CHAIN' 'Problem ' ('VALEUR' 'ELEM')) ;
  931. 'FINSI' ;
  932. *
  933. COMPX = 'PSCAL' AA BB ('MOTS' 'UY') ('MOTS' 'UZ') ;
  934. COMPX = COMPX '-' ('PSCAL' AA BB ('MOTS' 'UZ') ('MOTS' 'UY')) ;
  935. COMPX1 = 'EXCO' (TABM . 'MATROT') ('MOTS' 'UX')
  936. ('MOTS' 'SCAL') ;
  937. ERRO = 'MAXIMUM' (COMPX '-' COMPX1) 'ABS' ;
  938. 'SI' (ERRO > 1.0D-12) ;
  939. 'ERREUR' ('CHAIN' 'Problem ' ('VALEUR' 'ELEM')) ;
  940. 'FINSI' ;
  941. *
  942. COMPY = 'PSCAL' AA BB ('MOTS' 'UZ') ('MOTS' 'UX') ;
  943. COMPY = COMPY '-' ('PSCAL' AA BB ('MOTS' 'UX') ('MOTS' 'UZ')) ;
  944. COMPY1 = 'EXCO' (TABM . 'MATROT') ('MOTS' 'UY')
  945. ('MOTS' 'SCAL') ;
  946. ERRO = 'MAXIMUM' (COMPY '-' COMPY1) 'ABS' ;
  947. 'SI' (ERRO > 1.0D-12) ;
  948. 'ERREUR' ('CHAIN' 'Problem ' ('VALEUR' 'ELEM')) ;
  949. 'FINSI' ;
  950.  
  951. ******************************
  952. **** PYR5 ********************
  953. ******************************
  954.  
  955.  
  956. *
  957. * General case
  958. *
  959. 'OPTION' 'DIME' 3 'ELEM' 'PYR5' ;
  960. P1 = 0.0 0.0 0.11 ;
  961. P2 = 1.1 0.0 0.13 ;
  962. P3 = 1.0 1.3 0.15 ;
  963. P4 = 0.0 1.0 0.0;
  964. P5 = 0.5 0.5 1.0 ;
  965.  
  966. P1 P2 P3 P4 P5 = P1 P2 P3 P4 P5 'TOURNER' 15.0
  967. (0.0 0.0 4.0) (1.1 1.1 4.0) ;
  968. MAIL = 'MANUEL' 'PYR5' P1 P2 P3 P4 P5 ;
  969. MODM = 'MODELISER' MAIL 'EULER' ;
  970. TABM = 'DOMA' MODM 'VF' ; QMAIL = TABM . 'QUAF' ;
  971. MAIL1 = 'MANUEL' 'QUA4' P1 P2 P3 P4 ;
  972. MODM1 = 'MODELISER' MAIL1 'EULER' ;
  973. TABM1 = 'DOMA' MODM1 'VF' ; QMAIL1 = TABM1 . 'QUAF' ;
  974.  
  975. 'ELIMINATION' QMAIL QMAIL1 0.001 ;
  976.  
  977. PCENF = 'POIN' 1 (TABM1 . 'CENTRE') ;
  978.  
  979. *
  980. 'SI' GRAPH ;
  981. 'TRACER' (MAIL 'ET' QMAIL) 'TITRE' 'QUAF' ;
  982. 'TRACER' ((tabm . 'MAILLAGE') et ((tabm . 'CENTRE') 'COUL' 'ROUGE'))
  983. 'TITRE' 'CENTRE et MAILLAGE';
  984. VEC1 = 'VECTEUR' (TABM . 'XXNORMAF') 0.1 'UX' 'UY' 'UZ' 'ROUG' ;
  985. 'TRACER' MAIL VEC1 'TITRE' 'Normals' ;
  986. 'FINSI' ;
  987. *
  988. AA = 'DIFF' MAIL (TABM . 'MAILLAGE') ;
  989. 'SI' ('NEG' ('NBEL' AA) 0) ;
  990. 'MESSAGE' 'PYR5' ;
  991. 'ERREUR' 5 ;
  992. 'FINSI' ;
  993.  
  994. * Volume as the volume of 4 tetrahedra
  995.  
  996. VOL1 = 'MESURE' ('MANUEL' 'TET4' P1 P2 PCENF P5) ;
  997. VOL2 = 'MESURE' ('MANUEL' 'TET4' P2 P3 PCENF P5) ;
  998. VOL3 = 'MESURE' ('MANUEL' 'TET4' P3 P4 PCENF P5) ;
  999. VOL4 = 'MESURE' ('MANUEL' 'TET4' P4 P1 PCENF P5) ;
  1000. VOL = VOL1 '+' VOL2 '+' VOL3 '+' VOL4 ;
  1001.  
  1002. VOL0 = 'MAXIMUM' (TABM . 'XXVOLUM') ;
  1003.  
  1004. ERRO = (VOL0 '-' VOL) 'ABS' ;
  1005.  
  1006. 'SI' (ERRO > 1.0D-6) ;
  1007. 'MESSAGE' 'PYR5' ;
  1008. 'ERREUR' 21 ;
  1009. 'FINSI' ;
  1010.  
  1011. * Centre
  1012. PCEN1 = P1 'PLUS' P2 'PLUS' PCENF 'PLUS' P5 ;
  1013. PCEN1 = PCEN1 '/' 4. ;
  1014. PCEN2 = P2 'PLUS' P3 'PLUS' PCENF 'PLUS' P5 ;
  1015. PCEN2 = PCEN2 '/' 4. ;
  1016. PCEN3 = P3 'PLUS' P4 'PLUS' PCENF 'PLUS' P5 ;
  1017. PCEN3 = PCEN3 '/' 4. ;
  1018. PCEN4 = P4 'PLUS' P1 'PLUS' PCENF 'PLUS' P5 ;
  1019. PCEN4 = PCEN4 '/' 4. ;
  1020.  
  1021. PCEN = (VOL1 * PCEN1) 'PLUS' (VOL2 * PCEN2) 'PLUS'
  1022. (VOL3 * PCEN3) 'PLUS' (VOL4 * PCEN4) ;
  1023. PCEN = PCEN '/' VOL ;
  1024. 'ELIMINATION' (PCEN 'ET' (TABM . 'CENTRE')) 0.0001 ;
  1025.  
  1026. AA = 'DIFF' ('MANUEL' 'POI1' PCEN) (TABM . 'CENTRE') ;
  1027. 'SI' ('NEG' ('NBEL' AA) 0) ;
  1028. 'MESSAGE' 'PYR5' ;
  1029. 'ERREUR' 5 ;
  1030. 'FINSI' ;
  1031.  
  1032. * Normals and surface
  1033.  
  1034. PNOR1 = 0.5 '*' ('PVEC' (P1 'MOIN' PCENF) (P4 'MOIN' PCENF)) ;
  1035. PNOR2 = 0.5 '*' ('PVEC' (P2 'MOIN' PCENF) (P1 'MOIN' PCENF)) ;
  1036. PNOR3 = 0.5 '*' ('PVEC' (P3 'MOIN' PCENF) (P2 'MOIN' PCENF)) ;
  1037. PNOR4 = 0.5 '*' ('PVEC' (P4 'MOIN' PCENF) (P3 'MOIN' PCENF)) ;
  1038.  
  1039. PNOR = PNOR1 'PLUS' PNOR2 'PLUS' PNOR3 'PLUS' PNOR4 ;
  1040. XSURF = (('PSCAL' PNOR PNOR) '**' 0.5) ;
  1041. PNOR = PNOR '/' XSURF ;
  1042.  
  1043. AA = ('REDU' (tabm . 'XXNORMAF') ('MANUEL' 'POI1' PCENF)) ;
  1044. BB = 'MANUEL' 'CHPO' ('MANU' 'POI1' PCENF) 3
  1045. 'UX' ('COORDONNEE' 1 PNOR)
  1046. 'UY' ('COORDONNEE' 2 PNOR)
  1047. 'UZ' ('COORDONNEE' 3 PNOR);
  1048. ERRO = 'MAXIMUM' (AA '-' BB) 'ABS' ;
  1049. 'SI' (ERRO > 1.0D-6) ;
  1050. 'MESSAGE' 'PYR5' ;
  1051. 'ERREUR' 21 ;
  1052. 'FINSI' ;
  1053.  
  1054. AA = ('REDU' (tabm . 'XXSURFAC') ('MANUEL' 'POI1' PCENF)) ;
  1055. BB = 'MANUEL' 'CHPO' ('MANU' 'POI1' PCENF) 1 'SCAL' XSURF ;
  1056. ERRO = 'MAXIMUM' (AA '-' BB) 'ABS' ;
  1057. 'SI' (ERRO > 1.0D-6) ;
  1058. 'MESSAGE' 'PYR5' ;
  1059. 'ERREUR' 21 ;
  1060. 'FINSI' ;
  1061.  
  1062. *
  1063. * Particular case (base bizarre)
  1064. * Clockwise orientation.
  1065.  
  1066. 'OPTION' 'DIME' 3 'ELEM' 'PYR5' ;
  1067. P1 = 0.0 0.0 0.12 ;
  1068. P2 = 1.0 0.0 -0.1 ;
  1069. P3 = 1.0 1.0 0.31 ;
  1070. P4 = 0.5 0.4 -0.21 ;
  1071. P5 = 0.5 0.5 2.0 ;
  1072.  
  1073. P1 P2 P3 P4 P5 = P1 P2 P3 P4 P5 'TOURNER' 15.0
  1074. (0.0 0.0 4.0) (1.1 1.1 4.0) ;
  1075. MAIL = 'MANUEL' 'PYR5' P1 P2 P3 P4 P5 ;
  1076. MODM = 'MODELISER' MAIL 'EULER' ;
  1077. TABM = 'DOMA' MODM 'VF' ; QMAIL = TABM . 'QUAF' ;
  1078. MAIL1 = 'MANUEL' 'QUA4' P1 P2 P3 P4 ;
  1079. MODM1 = 'MODELISER' MAIL1 'EULER' ;
  1080. TABM1 = 'DOMA' MODM1 'VF' ; QMAIL1 = TABM1 . 'QUAF' ;
  1081.  
  1082. 'ELIMINATION' QMAIL QMAIL1 0.001 ;
  1083.  
  1084. PCENF = 'POIN' 1 (TABM1 . 'CENTRE') ;
  1085.  
  1086. *
  1087. 'SI' GRAPH ;
  1088. 'TRACER' (MAIL 'ET' QMAIL) 'TITRE' 'QUAF' ;
  1089. 'TRACER' ((tabm . 'MAILLAGE') et ((tabm . 'CENTRE') 'COUL' 'ROUGE'))
  1090. 'TITRE' 'CENTRE et MAILLAGE';
  1091. VEC1 = 'VECTEUR' (TABM . 'XXNORMAF') 0.1 'UX' 'UY' 'UZ' 'ROUG' ;
  1092. 'TRACER' MAIL VEC1 'TITRE' 'Normals' ;
  1093. 'FINSI' ;
  1094. *
  1095. AA = 'DIFF' MAIL (TABM . 'MAILLAGE') ;
  1096. 'SI' ('NEG' ('NBEL' AA) 0) ;
  1097. 'MESSAGE' 'PYR5' ;
  1098. 'ERREUR' 5 ;
  1099. 'FINSI' ;
  1100.  
  1101. * Volume as the volume of 4 tetrahedra
  1102.  
  1103. VOL1 = 'MESURE' ('MANUEL' 'TET4' P1 P2 PCENF P5) ;
  1104. VOL2 = 'MESURE' ('MANUEL' 'TET4' P2 P3 PCENF P5) ;
  1105. VOL3 = 'MESURE' ('MANUEL' 'TET4' P3 P4 PCENF P5) ;
  1106. VOL4 = 'MESURE' ('MANUEL' 'TET4' P4 P1 PCENF P5) ;
  1107. VOL = VOL1 '+' VOL2 '+' VOL3 '+' VOL4 ;
  1108.  
  1109. VOL0 = 'MAXIMUM' (TABM . 'XXVOLUM') ;
  1110.  
  1111. ERRO = (VOL0 '-' VOL) 'ABS' ;
  1112.  
  1113. 'SI' (ERRO > 1.0D-6) ;
  1114. 'MESSAGE' 'PYR5' ;
  1115. 'ERREUR' 21 ;
  1116. 'FINSI' ;
  1117.  
  1118. * Centre
  1119. PCEN1 = P1 'PLUS' P2 'PLUS' PCENF 'PLUS' P5 ;
  1120. PCEN1 = PCEN1 '/' 4. ;
  1121. PCEN2 = P2 'PLUS' P3 'PLUS' PCENF 'PLUS' P5 ;
  1122. PCEN2 = PCEN2 '/' 4. ;
  1123. PCEN3 = P3 'PLUS' P4 'PLUS' PCENF 'PLUS' P5 ;
  1124. PCEN3 = PCEN3 '/' 4. ;
  1125. PCEN4 = P4 'PLUS' P1 'PLUS' PCENF 'PLUS' P5 ;
  1126. PCEN4 = PCEN4 '/' 4. ;
  1127.  
  1128. PCEN = (VOL1 * PCEN1) 'PLUS' (VOL2 * PCEN2) 'PLUS'
  1129. (VOL3 * PCEN3) 'PLUS' (VOL4 * PCEN4) ;
  1130. PCEN = PCEN '/' VOL ;
  1131. 'ELIMINATION' (PCEN 'ET' (TABM . 'CENTRE')) 0.0001 ;
  1132.  
  1133. AA = 'DIFF' ('MANUEL' 'POI1' PCEN) (TABM . 'CENTRE') ;
  1134. 'SI' ('NEG' ('NBEL' AA) 0) ;
  1135. 'MESSAGE' 'PYR5' ;
  1136. 'ERREUR' 5 ;
  1137. 'FINSI' ;
  1138.  
  1139. * Normals and surface
  1140.  
  1141. PNOR1 = 0.5 '*' ('PVEC' (P1 'MOIN' PCENF) (P4 'MOIN' PCENF)) ;
  1142. PNOR2 = 0.5 '*' ('PVEC' (P2 'MOIN' PCENF) (P1 'MOIN' PCENF)) ;
  1143. PNOR3 = 0.5 '*' ('PVEC' (P3 'MOIN' PCENF) (P2 'MOIN' PCENF)) ;
  1144. PNOR4 = 0.5 '*' ('PVEC' (P4 'MOIN' PCENF) (P3 'MOIN' PCENF)) ;
  1145.  
  1146. PNOR = PNOR1 'PLUS' PNOR2 'PLUS' PNOR3 'PLUS' PNOR4 ;
  1147. XSURF = (('PSCAL' PNOR PNOR) '**' 0.5) ;
  1148. PNOR = PNOR '/' XSURF ;
  1149.  
  1150. AA = ('REDU' (tabm . 'XXNORMAF') ('MANUEL' 'POI1' PCENF)) ;
  1151. BB = 'MANUEL' 'CHPO' ('MANU' 'POI1' PCENF) 3
  1152. 'UX' ('COORDONNEE' 1 PNOR)
  1153. 'UY' ('COORDONNEE' 2 PNOR)
  1154. 'UZ' ('COORDONNEE' 3 PNOR);
  1155. ERRO = 'MAXIMUM' (AA '-' BB) 'ABS' ;
  1156. 'SI' (ERRO > 1.0D-6) ;
  1157. 'MESSAGE' 'PYR5' ;
  1158. 'ERREUR' 21 ;
  1159. 'FINSI' ;
  1160.  
  1161. AA = ('REDU' (tabm . 'XXSURFAC') ('MANUEL' 'POI1' PCENF)) ;
  1162. BB = 'MANUEL' 'CHPO' ('MANU' 'POI1' PCENF) 1 'SCAL' XSURF ;
  1163. ERRO = 'MAXIMUM' (AA '-' BB) 'ABS' ;
  1164. 'SI' (ERRO > 1.0D-6) ;
  1165. 'MESSAGE' 'PYR5' ;
  1166. 'ERREUR' 21 ;
  1167. 'FINSI' ;
  1168.  
  1169. *
  1170. * We check that the normals modulus are 1
  1171. *
  1172. VALNOR = TABM . 'XXNORMAF' ;
  1173. VALSUR = TABM . 'XXSURFAC' ;
  1174.  
  1175. AA = 'PSCAL' VALNOR VALNOR ('MOTS' 'UX' 'UY' 'UZ')
  1176. ('MOTS' 'UX' 'UY' 'UZ') ;
  1177. 'SI' ((('MAXIMUM' AA) 'NEG' 1.0 1.0D-12) 'OU'
  1178. (('MINIMUM' AA) 'NEG' 1.0 1.0D-12)) ;
  1179. 'ERREUR' 'PYR5' ;
  1180. 'FINSI' ;
  1181.  
  1182. *
  1183. * We check that the sum of (normals times surfaces) is zero
  1184. *
  1185. AA = VALNOR '*' VALSUR ;
  1186. BB = 'MANUEL' 'CHPO' (TABM . 'FACE') 1 'SCAL' 1.0 ;
  1187. ERRO = 'XTY' AA BB ('MOTS' 'UX' 'UY' 'UZ')
  1188. ('MOTS' 'SCAL' 'SCAL' 'SCAL') ;
  1189. 'SI' (ERRO > 1.0D-12) ;
  1190. 'ERREUR' 'PYR5' ;
  1191. 'FINSI' ;
  1192. *
  1193. * We check the triangular faces.
  1194. *
  1195.  
  1196. PCEN1 = (P1 'PLUS' P2 'PLUS' P5) '/' 3. ;
  1197. PCEN2 = (P2 'PLUS' P3 'PLUS' P5) '/' 3. ;
  1198. PCEN3 = (P3 'PLUS' P4 'PLUS' P5) '/' 3. ;
  1199. PCEN4 = (P4 'PLUS' P1 'PLUS' P5) '/' 3. ;
  1200. *
  1201. A1 = 'PVECT' (P1 'MOIN' P5) (P2 'MOIN' P5) ;
  1202. A2 = 'PVECT' (P2 'MOIN' P5) (P3 'MOIN' P5) ;
  1203. A3 = 'PVECT' (P3 'MOIN' P5) (P4 'MOIN' P5) ;
  1204. A4 = 'PVECT' (P4 'MOIN' P5) (P1 'MOIN' P5) ;
  1205. VALSUR1 = 'PROG' ('PSCAL' A1 A1) ('PSCAL' A2 A2)
  1206. ('PSCAL' A3 A3) ('PSCAL' A4 A4) ;
  1207. VALSUR1 = VALSUR1 '**' 0.5 ;
  1208. VALSUR1 = VALSUR1 '*' 0.5 ;
  1209. VALSURM = 'MANUEL' 'QUA4' PCEN1 PCEN2 PCEN3 PCEN4 ;
  1210. 'ELIMINATION' VALSURM 0.001 (TABM . 'FACE') ;
  1211. VALSUR2 = 'MANUEL' 'CHPO' (CHAN 'POI1' VALSURM) 1 'SCAL' VALSUR1 ;
  1212. ERRO = 'MAXI' (('REDU' VALSUR VALSURM) '-' VALSUR2) 'ABS' ;
  1213. 'SI' (ERRO > 1.0D-7) ;
  1214. 'ERREUR' ('CHAIN' 'Problem ' ('VALEUR' 'ELEM')) ;
  1215. 'FINSI' ;
  1216.  
  1217. *
  1218. * Matrot
  1219. *
  1220. AA = 'EXCO' (TABM . 'MATROT') ('MOTS' 'MX' 'MY' 'MZ')
  1221. ('MOTS' 'UX' 'UY' 'UZ') ;
  1222. ERRO ='MAXIMUM' (AA '-' (TABM . 'XXNORMAF')) 'ABS' ;
  1223. 'SI' (ERRO > 1.0D-12) ;
  1224. 'ERREUR' ('CHAIN' 'Problem ' ('VALEUR' 'ELEM')) ;
  1225. 'FINSI' ;
  1226. *
  1227. BB = 'EXCO' (TABM . 'MATROT') ('MOTS' 'RX' 'RY' 'RZ')
  1228. ('MOTS' 'UX' 'UY' 'UZ') ;
  1229. ERRO = 'MAXIMUM' ('PSCAL' AA BB ('MOTS' 'UX' 'UY' 'UZ')
  1230. ('MOTS' 'UX' 'UY' 'UZ'))
  1231. 'ABS' ;
  1232. 'SI' (ERRO > 1.0D-12) ;
  1233. 'ERREUR' ('CHAIN' 'Problem ' ('VALEUR' 'ELEM')) ;
  1234. 'FINSI' ;
  1235. *
  1236. COMPZ = 'PSCAL' AA BB ('MOTS' 'UX') ('MOTS' 'UY') ;
  1237. COMPZ = COMPZ '-' ('PSCAL' AA BB ('MOTS' 'UY') ('MOTS' 'UX')) ;
  1238. COMPZ1 = 'EXCO' (TABM . 'MATROT') ('MOTS' 'UZ')
  1239. ('MOTS' 'SCAL') ;
  1240. ERRO = 'MAXIMUM' (COMPZ '-' COMPZ1) 'ABS' ;
  1241. 'SI' (ERRO > 1.0D-12) ;
  1242. 'ERREUR' ('CHAIN' 'Problem ' ('VALEUR' 'ELEM')) ;
  1243. 'FINSI' ;
  1244. *
  1245. COMPX = 'PSCAL' AA BB ('MOTS' 'UY') ('MOTS' 'UZ') ;
  1246. COMPX = COMPX '-' ('PSCAL' AA BB ('MOTS' 'UZ') ('MOTS' 'UY')) ;
  1247. COMPX1 = 'EXCO' (TABM . 'MATROT') ('MOTS' 'UX')
  1248. ('MOTS' 'SCAL') ;
  1249. ERRO = 'MAXIMUM' (COMPX '-' COMPX1) 'ABS' ;
  1250. 'SI' (ERRO > 1.0D-12) ;
  1251. 'ERREUR' ('CHAIN' 'Problem ' ('VALEUR' 'ELEM')) ;
  1252. 'FINSI' ;
  1253. *
  1254. COMPY = 'PSCAL' AA BB ('MOTS' 'UZ') ('MOTS' 'UX') ;
  1255. COMPY = COMPY '-' ('PSCAL' AA BB ('MOTS' 'UX') ('MOTS' 'UZ')) ;
  1256. COMPY1 = 'EXCO' (TABM . 'MATROT') ('MOTS' 'UY')
  1257. ('MOTS' 'SCAL') ;
  1258. ERRO = 'MAXIMUM' (COMPY '-' COMPY1) 'ABS' ;
  1259. 'SI' (ERRO > 1.0D-12) ;
  1260. 'ERREUR' ('CHAIN' 'Problem ' ('VALEUR' 'ELEM')) ;
  1261. 'FINSI' ;
  1262.  
  1263. *
  1264. **** Plusieur pyr5 et CUB8 ;
  1265. *
  1266.  
  1267. P1 = 1.0 0.0 0.0 ;
  1268. P2 = 0.0 0.0 0.0 ;
  1269. P3 = 0.0 1.0 0.0 ;
  1270. P4 = 1.0 1.0 0.0 ;
  1271. P5 = 1.0 0.0 1.0 ;
  1272. P6 = 0.0 0.0 1.0 ;
  1273. P7 = 0.0 1.0 1.0 ;
  1274. P8 = 1.0 1.0 1.0 ;
  1275. P9 = 0.5 0.5 0.5 ;
  1276. P10= 1.0 0.0 2.0 ;
  1277. P11= 0.0 0.0 2.0 ;
  1278. P12= 0.0 1.0 2.0 ;
  1279. P13= 1.0 1.0 2.0 ;
  1280.  
  1281.  
  1282. *
  1283.  
  1284. MAIL1 = 'MANUEL' 'PYR5' P1 P2 P6 P5 P9 ;
  1285. MAIL2 = 'MANUEL' 'PYR5' P1 P4 P8 P5 P9 ;
  1286. MAIL3 = 'MANUEL' 'PYR5' P8 P7 P3 P4 P9 ;
  1287. MAIL4 = 'MANUEL' 'PYR5' P7 P6 P2 P3 P9 ;
  1288. MAIL5 = 'MANUEL' 'PYR5' P1 P2 P3 P4 P9 ;
  1289. MAIL6 = 'MANUEL' 'PYR5' P5 P6 P7 P8 P9 ;
  1290. MAIL7 = 'MANUEL' 'CUB8' P5 P6 P7 P8 P10 P11 P12 P13 ;
  1291.  
  1292.  
  1293. MAILT1 = MAIL1 'ET' MAIL2 'ET' MAIL3 'ET' MAIL4 'ET' MAIL5
  1294. 'ET' MAIL6 'ET' MAIL7 ;
  1295. MAILT2 = MAILT1 'PLUS' (1.0 0.0 0.0) ;
  1296. MAILT3 = MAILT2 'PLUS' (1.0 0.0 0.0) ;
  1297. MAILT1 = MAILT1 'ET' MAILT2 'ET' MAILT3 ;
  1298. 'ELIMINATION' MAILT1 0.001 ;
  1299. MAILT2 = MAILT1 'PLUS' (0.0 1.0 0.0) ;
  1300. MAILT3 = MAILT2 'PLUS' (0.0 1.0 0.0) ;
  1301. MAILT1 = MAILT1 'ET' MAILT2 'ET' MAILT3 ;
  1302. 'ELIMINATION' MAILT1 0.001 ;
  1303. MAILT2 = MAILT1 'PLUS' (0.0 0.0 2.0) ;
  1304. MAILT3 = MAILT2 'PLUS' (0.0 0.0 2.0) ;
  1305. MAIL = MAILT1 'ET' MAILT2 'ET' MAILT3 ;
  1306. 'ELIMINATION' MAIL 0.001 ;
  1307.  
  1308. ENVMAI = 'ENVELOPPE' MAIL ;
  1309. INTMAIL = 'DIFF' ('CHANGER' 'POI1' MAIL)
  1310. ('CHANGER' 'POI1' ENVMAI) ;
  1311.  
  1312. CHPO1 = 'BRUI' 'BLAN' 'UNIF' 0.0 0.2 INTMAIL ;
  1313. CHPO2 = 'BRUI' 'BLAN' 'UNIF' 0.0 0.2 INTMAIL ;
  1314. CHPO3 = 'BRUI' 'BLAN' 'UNIF' 0.0 0.2 INTMAIL ;
  1315. CHPO = ('NOMC' CHPO1 'UX' 'NATU' 'DISCRETE') 'ET'
  1316. ('NOMC' CHPO2 'UY' 'NATU' 'DISCRETE') 'ET'
  1317. ('NOMC' CHPO3 'UZ' 'NATU' 'DISCRETE') ;
  1318.  
  1319. 'FORME' CHPO ;
  1320.  
  1321. MODM = 'MODELISER' MAIL 'EULER' ;
  1322. TABM = 'DOMA' MODM 'VF' ; QMAIL = TABM . 'QUAF' ;
  1323.  
  1324. VOLU0 = 'MESURE' MAIL ;
  1325. VOLU1 = 'XTY' (TABM . 'XXVOLUM') ('MANUEL' 'CHPO' (TABM . 'CENTRE')
  1326. 1 'SCAL' 1.0) ('MOTS' 'SCAL') ('MOTS' 'SCAL') ;
  1327.  
  1328. ERRO = (VOLU0 '-' VOLU1) 'ABS' ;
  1329. 'SI' (ERRO > 1.0D-12) ;
  1330. 'ERREUR' ('CHAIN' 'Problem PYR5') ;
  1331. 'FINSI' ;
  1332.  
  1333. *
  1334. ******************************
  1335. **** PRI6 ********************
  1336. ******************************
  1337. *
  1338.  
  1339. *
  1340. * Clockwise direction
  1341. *
  1342.  
  1343. 'OPTION' 'DIME' 3 'ELEM' 'PRI6' ;
  1344. P1 = 0.1 0.0 0.1 ;
  1345. P3 = 1.0 1.1 -0.13 ;
  1346. P5 = 1.11 0.11 0.13 ;
  1347. P10 = 0.11 0.2 3.1 ;
  1348. P12 = 1.11 1. 2.7 ;
  1349. P14 = 1.1 0.11 3.23 ;
  1350. *
  1351. P1 P3 P5 P10 P12 P14 = P1 P3 P5 P10 P12 P14
  1352. 'TOURNER' 15.0 (0.0 0.0 5.0) (1.1 1.1 6.0) ;
  1353. *
  1354. MAIL = 'MANUEL' 'PRI6' P1 P3 P5 P10 P12 P14 ;
  1355. MODM = 'MODELISER' MAIL 'EULER' ;
  1356. TABM = 'DOMA' MODM 'VF' ; QMAIL = TABM . 'QUAF' ;
  1357. QMAIL1 = 'CHANGER' QMAIL 'POI1' ;
  1358. *
  1359. 'SI' GRAPH ;
  1360. 'TRACER' (MAIL 'ET' QMAIL) 'TITRE' 'QUAF' ;
  1361. 'TRACER' ((tabm . 'MAILLAGE') et ((tabm . 'CENTRE') 'COUL' 'ROUGE'))
  1362. 'TITRE' 'CENTRE et MAILLAGE';
  1363. VEC1 = 'VECTEUR' (TABM . 'XXNORMAF') 0.1 'UX' 'UY' 'UZ' 'ROUG' ;
  1364. 'TRACER' MAIL VEC1 'TITRE' 'Normals' ;
  1365. 'FINSI' ;
  1366. *
  1367. P16 = 'POIN' 16 QMAIL1 ;
  1368. P17 = 'POIN' 17 QMAIL1 ;
  1369. P18 = 'POIN' 18 QMAIL1 ;
  1370. P19 = 'POIN' 19 QMAIL1 ;
  1371. P20 = 'POIN' 20 QMAIL1 ;
  1372. *
  1373. P21 = 'POIN' 21 QMAIL1 ;
  1374. *
  1375. * Volume as the volume of 14 tetrahedra
  1376. *
  1377. VOL1 = 'MESURE' ('MANUEL' 'TET4' P1 P3 P5 P21) ;
  1378. VOL2 = 'MESURE' ('MANUEL' 'TET4' P10 P12 P14 P21) ;
  1379. *
  1380. VOL3 = 'MESURE' ('MANUEL' 'TET4' P1 P3 P16 P21) ;
  1381. VOL4 = 'MESURE' ('MANUEL' 'TET4' P3 P12 P16 P21) ;
  1382. VOL5 = 'MESURE' ('MANUEL' 'TET4' P12 P10 P16 P21) ;
  1383. VOL6 = 'MESURE' ('MANUEL' 'TET4' P10 P1 P16 P21) ;
  1384. *
  1385. VOL7 = 'MESURE' ('MANUEL' 'TET4' P3 P5 P17 P21) ;
  1386. VOL8 = 'MESURE' ('MANUEL' 'TET4' P5 P14 P17 P21) ;
  1387. VOL9 = 'MESURE' ('MANUEL' 'TET4' P14 P12 P17 P21) ;
  1388. VOL10 = 'MESURE' ('MANUEL' 'TET4' P12 P3 P17 P21) ;
  1389. *
  1390. VOL11 = 'MESURE' ('MANUEL' 'TET4' P5 P14 P18 P21) ;
  1391. VOL12 = 'MESURE' ('MANUEL' 'TET4' P14 P10 P18 P21) ;
  1392. VOL13 = 'MESURE' ('MANUEL' 'TET4' P10 P1 P18 P21) ;
  1393. VOL14 = 'MESURE' ('MANUEL' 'TET4' P1 P5 P18 P21) ;
  1394. *
  1395. VOL = VOL1 '+' VOL2 '+' VOL3 '+' VOL4 '+' VOL5 '+' VOL6
  1396. '+' VOL7 '+' VOL8 '+' VOL9 '+' VOL10 '+' VOL11 '+' VOL12
  1397. '+' VOL13 '+' VOL14 ;
  1398. *
  1399. VOL0 = 'MAXIMUM' (TABM . 'XXVOLUM') ;
  1400. *
  1401. ERRO = (VOL0 '-' VOL) 'ABS' ;
  1402. *
  1403. 'SI' (ERRO > 1.0D-6) ;
  1404. 'MESSAGE' 'PRI6' ;
  1405. 'ERREUR' 21 ;
  1406. 'FINSI' ;
  1407.  
  1408. * Sommet
  1409.  
  1410. MAILS = 'CHANGER' MAIL 'POI1' ;
  1411. AA = 'DIFF' MAILS (TABM . 'SOMMET') ;
  1412. 'SI' (('NBNO' AA) > 0 ) ;
  1413. 'MESSAGE' 'PRI6' ;
  1414. 'ERREUR' 21 ;
  1415. 'FINSI' ;
  1416.  
  1417. * FACEL, FACEP, ELTFA (comparaison 'NAVIER_STOKES' - 'EULER')
  1418.  
  1419. MOD2 = 'MODELISER' QMAIL 'NAVIER_STOKES' 'LINE' ;
  1420. TAB2 = 'DOMA' MOD2 'TABLE' ;
  1421.  
  1422. AA = 'DIFF' (TAB2 . 'FACEL') (TABM . 'FACEL') ;
  1423. 'SI' (('NBNO' AA) > 0 ) ;
  1424. 'MESSAGE' 'PRI6' ;
  1425. 'ERREUR' 21 ;
  1426. 'FINSI' ;
  1427.  
  1428. AA = 'DIFF' (TAB2 . 'FACEP') (TABM . 'FACEP') ;
  1429. 'SI' (('NBNO' AA) > 0 ) ;
  1430. 'MESSAGE' 'PRI6' ;
  1431. 'ERREUR' 21 ;
  1432. 'FINSI' ;
  1433.  
  1434. MAIL1 = (TAB2 . 'ELTFA') ;
  1435. MAIL2 = (TABM . 'ELTFA') ;
  1436. AA = 'DIFF' MAIL1 MAIL2 ;
  1437. 'SI' (('NBNO' AA) > 0 ) ;
  1438. 'MESSAGE' 'PRI6' ;
  1439. 'ERREUR' 21 ;
  1440. 'FINSI' ;
  1441.  
  1442. * XXDIEMIN (comparaison 'NAVIER_STOKES' - 'EULER')
  1443.  
  1444. CHPO1 = 'ABS' (TABM . 'XXDIEMIN') ;
  1445. CHPO2 = 'ABS' ('DOMA' TAB2 'XXDIEMIN') ;
  1446. ERRO = 'MAXIMUM' (CHPO1 '-' CHPO2) 'ABS' ;
  1447. 'SI' (ERRO > 1.0D-6) ;
  1448. 'MESSAGE' 'TRI3 et QUA4' ;
  1449. 'ERREUR' 21 ;
  1450. 'FINSI' ;
  1451.  
  1452. *
  1453. * Here we deplace the center of the gravity and we put
  1454. * it outside.
  1455. * But 'DOMA' rechanges its position.
  1456. *
  1457. * 'SI' CHECKERR ;
  1458. * 'MESSAGE' 'PRI6' ;
  1459. * 'MESSAGE' 'On deplace le centre de l''elt dehors' ;
  1460. * 'MESSAGE' ;
  1461. * AA = 'CHANGER' 'POI1' QMAIL ;
  1462. * DP = ('POIN' 19 AA) 'MOIN' ('POIN' 21 AA) ;
  1463. * BB = 'MANUEL' 'CHPO' ('MANUEL' 'POI1' ('POIN' 21 AA)) 3
  1464. * 'UX' (2 '*' ('COORDONNEE' 1 DP))
  1465. * 'UY' (2 '*' ('COORDONNEE' 2 DP))
  1466. * 'UZ' (2 '*' ('COORDONNEE' 3 DP)) ;
  1467. * 'FORME' BB ;
  1468. * 'SI' GRAPH ;
  1469. * 'TRACER' QMAIL 'TITRE' 'Centre dehors' ;
  1470. * 'FINSI' ;
  1471. * MODM = 'MODELISER' QMAIL 'EULER' ;
  1472. * TABM = 'DOMA' MODM 'VF' ;
  1473. * 'OPTION' DONN 5 ;
  1474. * 'FINSI' ;
  1475. *
  1476.  
  1477. * Normals and surface
  1478.  
  1479. * We consider the QUA5 P1 P3 P12 P10 P16
  1480. * The point are clockwise oriented
  1481.  
  1482. PNOR1 = 0.5 '*' ('PVEC' (P1 'MOIN' P16) (P3 'MOIN' P16)) ;
  1483. PNOR2 = 0.5 '*' ('PVEC' (P3 'MOIN' P16) (P12 'MOIN' P16)) ;
  1484. PNOR3 = 0.5 '*' ('PVEC' (P12 'MOIN' P16) (P10 'MOIN' P16)) ;
  1485. PNOR4 = 0.5 '*' ('PVEC' (P10 'MOIN' P16) (P1 'MOIN' P16)) ;
  1486.  
  1487. PNOR = PNOR1 'PLUS' PNOR2 'PLUS' PNOR3 'PLUS' PNOR4 ;
  1488. XSURF = (('PSCAL' PNOR PNOR) '**' 0.5) ;
  1489. PNOR = -1 '*' (PNOR '/' XSURF) ;
  1490.  
  1491. AA = ('REDU' (tabm . 'XXNORMAF') ('MANUEL' 'POI1' P16)) ;
  1492. BB = 'MANUEL' 'CHPO' ('MANU' 'POI1' P16) 3
  1493. 'UX' ('COORDONNEE' 1 PNOR)
  1494. 'UY' ('COORDONNEE' 2 PNOR)
  1495. 'UZ' ('COORDONNEE' 3 PNOR);
  1496. ERRO = 'MAXIMUM' (AA '-' BB) 'ABS' ;
  1497. 'SI' (ERRO > 1.0D-6) ;
  1498. 'MESSAGE' 'PRI6' ;
  1499. 'ERREUR' 21 ;
  1500. 'FINSI' ;
  1501.  
  1502. AA = ('REDU' (tabm . 'XXSURFAC') ('MANUEL' 'POI1' P16)) ;
  1503. BB = 'MANUEL' 'CHPO' ('MANU' 'POI1' P16) 1 'SCAL' XSURF ;
  1504. ERRO = 'MAXIMUM' (AA '-' BB) 'ABS' ;
  1505. 'SI' (ERRO > 1.0D-6) ;
  1506. 'MESSAGE' 'PRI6' ;
  1507. 'ERREUR' 21 ;
  1508. 'FINSI' ;
  1509.  
  1510.  
  1511. *
  1512. * We check that the normals modulus are 1
  1513. *
  1514. VALNOR = TABM . 'XXNORMAF' ;
  1515. VALSUR = TABM . 'XXSURFAC' ;
  1516.  
  1517. AA = 'PSCAL' VALNOR VALNOR ('MOTS' 'UX' 'UY' 'UZ')
  1518. ('MOTS' 'UX' 'UY' 'UZ') ;
  1519. 'SI' ((('MAXIMUM' AA) 'NEG' 1.0 1.0D-12) 'OU'
  1520. (('MINIMUM' AA) 'NEG' 1.0 1.0D-12)) ;
  1521. 'ERREUR' 'PRI6' ;
  1522. 'FINSI' ;
  1523.  
  1524. *
  1525. * We check that the sum of (normals times surfaces) is zero
  1526. *
  1527.  
  1528. AA = VALNOR '*' VALSUR ;
  1529. BB = 'MANUEL' 'CHPO' (TABM . 'FACE') 1 'SCAL' 1.0 ;
  1530. ERRO = 'XTY' AA BB ('MOTS' 'UX' 'UY' 'UZ')
  1531. ('MOTS' 'SCAL' 'SCAL' 'SCAL') ;
  1532. 'SI' (ERRO > 1.0D-12) ;
  1533. 'ERREUR' 'PRI6';
  1534. 'FINSI' ;
  1535.  
  1536. *
  1537. * We check one triangular face.
  1538. *
  1539.  
  1540. PCEN1 = (P1 'PLUS' P3 'PLUS' P5) '/' 3. ;
  1541. 'ELIMINATION' ((TABM . 'FACE') 'ET' PCEN1) 0.0001 ;
  1542.  
  1543. PNOR = 0.5 '*' ('PVEC' (P3 'MOIN' P1) (P5 'MOIN' P1)) ;
  1544. XSURF = (('PSCAL' PNOR PNOR) '**' 0.5) ;
  1545. PNOR = (PNOR '/' XSURF) ;
  1546.  
  1547. AA = ('REDU' (tabm . 'XXNORMAF') ('MANUEL' 'POI1' PCEN1)) ;
  1548. BB = 'MANUEL' 'CHPO' ('MANU' 'POI1' PCEN1) 3
  1549. 'UX' ('COORDONNEE' 1 PNOR)
  1550. 'UY' ('COORDONNEE' 2 PNOR)
  1551. 'UZ' ('COORDONNEE' 3 PNOR);
  1552. ERRO = 'MAXIMUM' (AA '-' BB) 'ABS' ;
  1553. 'SI' (ERRO > 1.0D-6) ;
  1554. 'MESSAGE' 'PRI6' ;
  1555. 'ERREUR' 21 ;
  1556. 'FINSI' ;
  1557.  
  1558. AA = ('REDU' (tabm . 'XXSURFAC') ('MANUEL' 'POI1' PCEN1)) ;
  1559. BB = 'MANUEL' 'CHPO' ('MANU' 'POI1' PCEN1) 1 'SCAL' XSURF ;
  1560. ERRO = 'MAXIMUM' (AA '-' BB) 'ABS' ;
  1561. 'SI' (ERRO > 1.0D-6) ;
  1562. 'MESSAGE' 'PRI6' ;
  1563. 'ERREUR' 21 ;
  1564. 'FINSI' ;
  1565.  
  1566.  
  1567. ******************************
  1568. **** CUB8 ********************
  1569. ******************************
  1570. *
  1571. * Particular case
  1572. *
  1573. 'OPTION' 'DIME' 3 'ELEM' 'CUB8' ;
  1574.  
  1575. P1 = 0.0 0.0 0.0 ;
  1576. P2 = 1.0 0.0 0.0 ;
  1577. P3 = 1.0 1.0 0.0 ;
  1578. P4 = 0.0 1.0 0.0 ;
  1579.  
  1580. MAILB = 'DALLER' (P1 'DROIT' 4 P2) (P2 'DROIT' 4 P3)
  1581. (P3 'DROIT' 4 P4) (P4 'DROIT' 4 P1)
  1582. 'PLAN' ;
  1583. MAIL = 'VOLUME' MAILB 'TRANSLATION' 4 (0.0 0.0 4.0) ;
  1584. MODM = 'MODELISER' MAIL 'EULER' ;
  1585. TABM = 'DOMA' MODM 'VF' ;
  1586. QMAIL = TABM . 'QUAF' ;
  1587.  
  1588. * Comparaison complete 'NAVIER_STOKES' - 'EULER'
  1589.  
  1590. MOD2 = 'MODELISER' QMAIL 'NAVIER_STOKES' 'LINE' ;
  1591. TAB2 = 'DOMA' MOD2 'TABLE' ;
  1592. TAB2 . 'PRECONDI' = 1 ;
  1593.  
  1594. AA = 'DIFF' (TAB2 . 'QUAF') (TABM . 'QUAF') ;
  1595. 'SI' (('NBNO' AA) > 0 ) ;
  1596. 'MESSAGE' 'TRI3 et QUA4' ;
  1597. 'ERREUR' 21 ;
  1598. 'FINSI' ;
  1599.  
  1600. AA = 'DIFF' (TAB2 . 'MAILLAGE') (TABM . 'MAILLAGE') ;
  1601. 'SI' (('NBNO' AA) > 0 ) ;
  1602. 'MESSAGE' 'TRI3 et QUA4' ;
  1603. 'ERREUR' 21 ;
  1604. 'FINSI' ;
  1605.  
  1606. AA = 'DIFF' (TAB2 . 'CENTRE') (TABM . 'CENTRE') ;
  1607. 'SI' (('NBNO' AA) > 0 ) ;
  1608. 'MESSAGE' 'TRI3 et QUA4' ;
  1609. 'ERREUR' 21 ;
  1610. 'FINSI' ;
  1611.  
  1612. AA = 'DIFF' (TAB2 . 'SOMMET') (TABM . 'SOMMET') ;
  1613. 'SI' (('NBNO' AA) > 0 ) ;
  1614. 'MESSAGE' 'TRI3 et QUA4' ;
  1615. 'ERREUR' 21 ;
  1616. 'FINSI' ;
  1617.  
  1618. AA = 'DIFF' (TAB2 . 'FACEL') (TABM . 'FACEL') ;
  1619. 'SI' (('NBNO' AA) > 0 ) ;
  1620. 'MESSAGE' 'TRI3 et QUA4' ;
  1621. 'ERREUR' 21 ;
  1622. 'FINSI' ;
  1623.  
  1624. AA = 'DIFF' (TAB2 . 'FACEP') (TABM . 'FACEP') ;
  1625. 'SI' (('NBNO' AA) > 0 ) ;
  1626. 'MESSAGE' 'TRI3 et QUA4' ;
  1627. 'ERREUR' 21 ;
  1628. 'FINSI' ;
  1629.  
  1630. AA = 'DIFF' (TAB2 . 'ELTFA') (TABM . 'ELTFA') ;
  1631. 'SI' (('NBNO' AA) > 0 ) ;
  1632. 'MESSAGE' 'TRI3 et QUA4' ;
  1633. 'ERREUR' 21 ;
  1634. 'FINSI' ;
  1635.  
  1636. * XXSURFAC, XXNORMAF, XXDIEMIN (comparaison 'NAVIER_STOKES' - 'EULER')
  1637.  
  1638. CHPO1 = 'DOMA' TAB2 'XXSURFAC' ;
  1639. CHPO2 = TABM . 'XXSURFAC' ;
  1640. ERRO = 'MAXIMUM' (CHPO1 '-' CHPO2) 'ABS' ;
  1641. 'SI' (ERRO > 1.0D-6) ;
  1642. 'MESSAGE' 'TRI3 et QUA4' ;
  1643. 'ERREUR' 21 ;
  1644. 'FINSI' ;
  1645.  
  1646. CHPO1 = 'DOMA' TAB2 'XXVOLUM' ;
  1647. CHPO2 = TABM . 'XXVOLUM' ;
  1648. ERRO = 'MAXIMUM' (CHPO1 '-' CHPO2) 'ABS' ;
  1649. 'SI' (ERRO > 1.0D-6) ;
  1650. 'MESSAGE' 'TRI3 et QUA4' ;
  1651. 'ERREUR' 21 ;
  1652. 'FINSI' ;
  1653.  
  1654. CHPO1 = 'ABS' (TABM . 'XXNORMAF') ;
  1655. CHPO2 = 'ABS' ('DOMA' TAB2 'XXNORMAF') ;
  1656. ERRO = 'MAXIMUM' (CHPO1 '-' CHPO2) 'ABS' ;
  1657. 'SI' (ERRO > 1.0D-6) ;
  1658. 'MESSAGE' 'TRI3 et QUA4' ;
  1659. 'ERREUR' 21 ;
  1660. 'FINSI' ;
  1661.  
  1662. * Normales dans la meme direction que FACEL
  1663.  
  1664. NNO = 'NBEL' (TABM . 'FACEL') ;
  1665. 'REPETER' BL1 NNO ;
  1666. AA = 'ELEM' &BL1 (TABM . 'FACEL') ;
  1667. BB = 'CHANGER' AA 'POI1' ;
  1668. P1 = 'POIN' 1 BB ;
  1669. P2 = 'POIN' 2 BB ;
  1670. VALX = ('COORDONNEE' 1 P2) '-' ('COORDONNEE' 1 P1) ;
  1671. VALY = ('COORDONNEE' 2 P2) '-' ('COORDONNEE' 2 P1) ;
  1672. VALZ = ('COORDONNEE' 3 P2) '-' ('COORDONNEE' 3 P1) ;
  1673. VALX1 = 'EXTRAIRE' (TABM . 'XXNORMAF') 'UX' P2 ;
  1674. VALY1 = 'EXTRAIRE' (TABM . 'XXNORMAF') 'UY' P2 ;
  1675. VALZ1 = 'EXTRAIRE' (TABM . 'XXNORMAF') 'UZ' P2 ;
  1676. VAL = (VALX '*' VALX1) '+' (VALY '*' VALY1)
  1677. '+' (VALZ '*' VALZ1) ;
  1678. 'SI' (VAL < 0) ;
  1679. 'MESSAGE' 'CUB8' ;
  1680. 'ERREUR' 21 ;
  1681. 'FINSI' ;
  1682. 'FIN' BL1 ;
  1683.  
  1684. CHPO1 = (TABM . 'XXDIEMIN') ;
  1685. CHPO2 = ('DOMA' TAB2 'XXDIEMIN') ;
  1686. ERRO = 'MAXIMUM' (CHPO1 '-' CHPO2) 'ABS' ;
  1687. 'SI' (ERRO > 1.0D-6) ;
  1688. 'MESSAGE' 'TRI3 et QUA4' ;
  1689. 'ERREUR' 21 ;
  1690. 'FINSI' ;
  1691.  
  1692.  
  1693. *
  1694. **** MATROT dans le cas NAVIER_STOKES
  1695. *
  1696.  
  1697.  
  1698.  
  1699. *
  1700. * General case
  1701. * Clockwise orientation
  1702. *
  1703. 'OPTION' 'DIME' 3 'ELEM' 'CUB8' ;
  1704. P1 = 0.10 0.20 0.11 ;
  1705. P3 = 0.01 1.03 -0.11 ;
  1706. P5 = 1.03 1.04 0.05 ;
  1707. P7 = 1.01 0.02 0.03 ;
  1708. P13 = 0.05 0.04 2.11 ;
  1709. P15 = 0.08 1.01 1.91 ;
  1710. P17 = 1.07 1.02 2.15 ;
  1711. P19 = 1.06 0.03 2.13 ;
  1712. *
  1713. * P1 P3 P5 P7 P13 P15 P17 P19 = P1 P3 P5 P7 P13 P15 P17 P19
  1714. * 'TOURNER' 15.0 (0.0 0.0 5.0) (1.1 1.1 6.0) ;
  1715. *
  1716. MAIL = 'MANUEL' 'CUB8' P1 P3 P5 P7 P13 P15 P17 P19 ;
  1717. MODM = 'MODELISER' MAIL 'EULER' ; QMAIL = TABM . 'QUAF' ;
  1718. TABM = 'DOMA' MODM 'VF' ;
  1719. QMAIL = TABM . 'QUAF' ;
  1720. *
  1721. QMAIL1 = 'CHANGER' QMAIL 'POI1' ;
  1722. P21 = 'POIN' QMAIL1 21 ;
  1723. P22 = 'POIN' QMAIL1 22 ;
  1724. P23 = 'POIN' QMAIL1 23 ;
  1725. P24 = 'POIN' QMAIL1 24 ;
  1726. P25 = 'POIN' QMAIL1 25 ;
  1727. P26 = 'POIN' QMAIL1 26 ;
  1728. P27 = 'POIN' QMAIL1 27 ;
  1729. *
  1730. 'SI' GRAPH ;
  1731. 'TRACER' (MAIL 'ET' QMAIL) 'TITRE' 'QUAF' ;
  1732. 'TRACER' ((tabm . 'MAILLAGE') et ((tabm . 'CENTRE') 'COUL' 'ROUGE'))
  1733. 'TITRE' 'CENTRE et MAILLAGE';
  1734. 'FINSI' ;
  1735. *
  1736. AA = 'DIFF' MAIL (TABM . 'MAILLAGE') ;
  1737. 'SI' ('NEG' ('NBEL' AA) 0) ;
  1738. 'MESSAGE' 'CUB8' ;
  1739. 'ERREUR' 5 ;
  1740. 'FINSI' ;
  1741. *
  1742. *
  1743. * Volume
  1744. *
  1745. VOL = 0.0D0 ;
  1746. QC = P27 ;
  1747. 'REPETER' BL1 6 ;
  1748. 'SI' ('EGA' &BL1 1) ;
  1749. Q1 = P1 ; Q2 = P3 ; Q3 = P5 ; Q4 = P7 ; QF = P25 ;
  1750. 'FINSI' ;
  1751. 'SI' ('EGA' &BL1 2) ;
  1752. Q1 = P13 ; Q2 = P15 ; Q3 = P17 ; Q4 = P19 ; QF = P26 ;
  1753. 'FINSI' ;
  1754. 'SI' ('EGA' &BL1 3) ;
  1755. Q1 = P1 ; Q2 = P3 ; Q3 = P15 ; Q4 = P13 ; QF = P21 ;
  1756. 'FINSI' ;
  1757. 'SI' ('EGA' &BL1 4) ;
  1758. Q1 = P3 ; Q2 = P5 ; Q3 = P17 ; Q4 = P15 ; QF = P22 ;
  1759. 'FINSI' ;
  1760. 'SI' ('EGA' &BL1 5) ;
  1761. Q1 = P7 ; Q2 = P5 ; Q3 = P17 ; Q4 = P19 ; QF = P23 ;
  1762. 'FINSI' ;
  1763. 'SI' ('EGA' &BL1 6) ;
  1764. Q1 = P1 ; Q2 = P13 ; Q3 = P19 ; Q4 = P7 ; QF = P24 ;
  1765. 'FINSI' ;
  1766. VOL1 = 'MESURE' ('MANUEL' 'TET4' Q1 Q2 QF QC) ;
  1767. VOL2 = 'MESURE' ('MANUEL' 'TET4' Q2 Q3 QF QC) ;
  1768. VOL3 = 'MESURE' ('MANUEL' 'TET4' Q3 Q4 QF QC) ;
  1769. VOL4 = 'MESURE' ('MANUEL' 'TET4' Q4 Q1 QF QC) ;
  1770. VOL = VOL '+' VOL1 '+' VOL2 '+' VOL3 '+' VOL4 ;
  1771. 'FIN' BL1 ;
  1772. *
  1773. VOL0 = 'MAXIMUM' (TABM . 'XXVOLUM') ;
  1774. *
  1775. ERRO = (VOL0 '-' VOL) 'ABS' ;
  1776. *
  1777. 'SI' (ERRO > 1.0D-6) ;
  1778. 'MESSAGE' 'CUB8' ;
  1779. 'ERREUR' 21 ;
  1780. 'FINSI' ;
  1781.  
  1782. * Sommet
  1783.  
  1784. MAILS = 'CHANGER' MAIL 'POI1' ;
  1785. AA = 'DIFF' MAILS (TABM . 'SOMMET') ;
  1786. 'SI' (('NBNO' AA) > 0 ) ;
  1787. 'MESSAGE' 'CUB8' ;
  1788. 'ERREUR' 21 ;
  1789. 'FINSI' ;
  1790.  
  1791. * FACEL, FACEP, ELTFA (comparaison 'NAVIER_STOKES' - 'EULER')
  1792.  
  1793. MOD2 = 'MODELISER' QMAIL 'NAVIER_STOKES' 'LINE' ;
  1794. TAB2 = 'DOMA' MOD2 'TABLE' ;
  1795.  
  1796. AA = 'DIFF' (TAB2 . 'FACEL') (TABM . 'FACEL') ;
  1797. 'SI' (('NBNO' AA) > 0 ) ;
  1798. 'MESSAGE' 'CUB8' ;
  1799. 'ERREUR' 21 ;
  1800. 'FINSI' ;
  1801.  
  1802. AA = 'DIFF' (TAB2 . 'FACEP') (TABM . 'FACEP') ;
  1803. 'SI' (('NBNO' AA) > 0 ) ;
  1804. 'MESSAGE' 'CUB8' ;
  1805. 'ERREUR' 21 ;
  1806. 'FINSI' ;
  1807.  
  1808. *MAIL1 = 'CHANGER' (TAB2 . 'ELTFA') 'POI1' ;
  1809. *MAIL2 = 'CHANGER' (TABM . 'ELTFA') 'POI1' ;
  1810. MAIL1 = (TAB2 . 'ELTFA') ;
  1811. MAIL2 = (TABM . 'ELTFA') ;
  1812. AA = 'DIFF' MAIL1 MAIL2 ;
  1813. 'SI' (('NBNO' AA) > 0 ) ;
  1814. 'MESSAGE' 'CUB8' ;
  1815. 'ERREUR' 21 ;
  1816. 'FINSI' ;
  1817.  
  1818. * XXDIEMIN (comparaison 'NAVIER_STOKES' - 'EULER')
  1819.  
  1820. CHPO1 = 'ABS' (TABM . 'XXDIEMIN') ;
  1821. CHPO2 = 'ABS' ('DOMA' TAB2 'XXDIEMIN') ;
  1822. ERRO = 'MAXIMUM' (CHPO1 '-' CHPO2) 'ABS' ;
  1823. 'SI' (ERRO > 1.0D-6) ;
  1824. 'MESSAGE' 'TRI3 et QUA4' ;
  1825. 'ERREUR' 21 ;
  1826. 'FINSI' ;
  1827.  
  1828. * Normals and surface
  1829. *
  1830. * We consider the QUA5 P1 P3 P5 P7 P25
  1831. * The point are clockwise oriented
  1832. *
  1833.  
  1834. PNOR1 = 0.5 '*' ('PVEC' (P1 'MOIN' P25) (P3 'MOIN' P25)) ;
  1835. PNOR2 = 0.5 '*' ('PVEC' (P3 'MOIN' P25) (P5 'MOIN' P25)) ;
  1836. PNOR3 = 0.5 '*' ('PVEC' (P5 'MOIN' P25) (P7 'MOIN' P25)) ;
  1837. PNOR4 = 0.5 '*' ('PVEC' (P7 'MOIN' P25) (P1 'MOIN' P25)) ;
  1838.  
  1839. PNOR = PNOR1 'PLUS' PNOR2 'PLUS' PNOR3 'PLUS' PNOR4 ;
  1840. XSURF = (('PSCAL' PNOR PNOR) '**' 0.5) ;
  1841. PNOR = (PNOR '/' XSURF) ;
  1842.  
  1843. AA = ('REDU' (tabm . 'XXNORMAF') ('MANUEL' 'POI1' P25)) ;
  1844. BB = 'MANUEL' 'CHPO' ('MANU' 'POI1' P25) 3
  1845. 'UX' ('COORDONNEE' 1 PNOR)
  1846. 'UY' ('COORDONNEE' 2 PNOR)
  1847. 'UZ' ('COORDONNEE' 3 PNOR);
  1848. ERRO = 'MAXIMUM' (AA '-' BB) 'ABS' ;
  1849. 'SI' (ERRO > 1.0D-6) ;
  1850. 'MESSAGE' 'CUB8' ;
  1851. 'ERREUR' 21 ;
  1852. 'FINSI' ;
  1853.  
  1854. AA = ('REDU' (tabm . 'XXSURFAC') ('MANUEL' 'POI1' P25)) ;
  1855. BB = 'MANUEL' 'CHPO' ('MANU' 'POI1' P25) 1 'SCAL' XSURF ;
  1856. ERRO = 'MAXIMUM' (AA '-' BB) 'ABS' ;
  1857. 'SI' (ERRO > 1.0D-6) ;
  1858. 'MESSAGE' 'CUB8' ;
  1859. 'ERREUR' 21 ;
  1860. 'FINSI' ;
  1861.  
  1862. *
  1863. * We check that the normals modulus are 1
  1864. *
  1865. VALNOR = TABM . 'XXNORMAF' ;
  1866. VALSUR = TABM . 'XXSURFAC' ;
  1867.  
  1868. AA = 'PSCAL' VALNOR VALNOR ('MOTS' 'UX' 'UY' 'UZ')
  1869. ('MOTS' 'UX' 'UY' 'UZ') ;
  1870. 'SI' ((('MAXIMUM' AA) 'NEG' 1.0 1.0D-12) 'OU'
  1871. (('MINIMUM' AA) 'NEG' 1.0 1.0D-12)) ;
  1872. 'ERREUR' 'CUB8' ;
  1873. 'FINSI' ;
  1874.  
  1875. *
  1876. * We check that the sum of (normals times surfaces) is zero
  1877. *
  1878.  
  1879. AA = VALNOR '*' VALSUR ;
  1880. BB = 'MANUEL' 'CHPO' (TABM . 'FACE') 1 'SCAL' 1.0 ;
  1881. ERRO = 'XTY' AA BB ('MOTS' 'UX' 'UY' 'UZ')
  1882. ('MOTS' 'SCAL' 'SCAL' 'SCAL') ;
  1883. 'SI' (ERRO > 1.0D-12) ;
  1884. 'ERREUR' 'CUB8';
  1885. 'FINSI' ;
  1886.  
  1887.  
  1888. ****************************************
  1889. ***** GENERAL **************************
  1890. ****************************************
  1891.  
  1892.  
  1893. 'OPTION' 'DIME' 3 'ELEM' 'CUB8' ;
  1894.  
  1895. P1 = 0.0 0.0 0.0 ;
  1896. P2 = 1.0 0.0 0.0 ;
  1897. P3 = 1.0 1.0 0.0 ;
  1898. P4 = 0.0 1.0 0.0 ;
  1899. P5 = 0.0 0.0 1.0 ;
  1900. P6 = 1.0 0.0 1.0 ;
  1901. P7 = 1.0 1.0 1.0 ;
  1902. P8 = 0.0 1.0 1.0 ;
  1903.  
  1904. P1P2 = P1 'DROIT' 4 P2 ;
  1905. P2P3 = P2 'DROIT' 5 P3 ;
  1906. P3P4 = P3 'DROIT' 4 P4 ;
  1907. P4P1 = P4 'DROIT' 5 P1 ;
  1908. P5P6 = P5 'DROIT' 4 P6 ;
  1909. P6P7 = P6 'DROIT' 5 P7 ;
  1910. P7P8 = P7 'DROIT' 4 P8 ;
  1911. P8P5 = P8 'DROIT' 5 P5 ;
  1912. P1P5 = P1 'DROIT' 4 P5 ;
  1913. P2P6 = P2 'DROIT' 5 P6 ;
  1914. P3P7 = P3 'DROIT' 4 P7 ;
  1915. P4P8 = P4 'DROIT' 5 P8 ;
  1916.  
  1917. SURFB = 'SURFACE' (P1P2 'ET' P2P3 'ET' P3P4 'ET' P4P1) 'PLAN' ;
  1918. SURFH = 'SURFACE' (P5P6 'ET' P6P7 'ET' P7P8 'ET' P8P5) 'PLAN' ;
  1919. SURFL1 = 'SURFACE' (P1P5 'ET' ('INVERSE' P8P5) 'ET'
  1920. ('INVERSE' P4P8) 'ET' P4P1) 'PLAN' ;
  1921. SURFL2 = 'SURFACE' (P1P2 'ET' P2P6 'ET' ('INVERSE' P5P6) 'ET'
  1922. ('INVERSE' P1P5)) 'PLAN' ;
  1923. SURFL3 = 'SURFACE' (P2P6 'ET' P6P7 'ET' ('INVERSE' P3P7) 'ET'
  1924. ('INVERSE' P2P3)) 'PLAN' ;
  1925. SURFL4 = 'SURFACE' (('INVERSE' P3P4) 'ET' P3P7 'ET' P7P8 'ET'
  1926. ('INVERSE' P4P8)) 'PLAN' ;
  1927.  
  1928. SURFT = SURFB 'ET' SURFH 'ET' SURFL1 'ET' SURFL2 'ET' SURFL3
  1929. 'ET' SURFL4 ;
  1930.  
  1931. MAIL = 'VOLUME' SURFT ;
  1932. *
  1933. MODM = 'MODELISER' MAIL 'EULER' ;
  1934. TABM = 'DOMA' MODM 'VF' ; QMAIL = TABM . 'QUAF' ;
  1935. *
  1936. 'SI' GRAPH ;
  1937. 'TRACER' (MAIL 'ET' QMAIL) 'TITRE' 'QUAF' ;
  1938. 'TRACER' ((tabm . 'MAILLAGE') et ((tabm . 'CENTRE') 'COUL' 'ROUGE'))
  1939. 'TITRE' 'CENTRE et MAILLAGE';
  1940. 'FINSI' ;
  1941. *
  1942. AA = 'DIFF' MAIL (TABM . 'MAILLAGE') ;
  1943. 'SI' ('NEG' ('NBEL' AA) 0) ;
  1944. 'MESSAGE' 'CUB8' ;
  1945. 'ERREUR' 5 ;
  1946. 'FINSI' ;
  1947. *
  1948. *** Border Surfaces
  1949. *
  1950. MODMS = 'MODELISER' SURFT 'EULER' ;
  1951. TABMS = 'DOMA' MODMS 'VF' ;
  1952. QSURFT = TABMS . 'QUAF' ;
  1953. 'ELIMINATION' (TABMS . 'QUAF') (TABM . 'QUAF') 0.0001 ;
  1954.  
  1955. VALNOR = 'REDU' (TABM . 'XXSURFAC') (TABMS . 'CENTRE') ;
  1956. VALSUR = 'REDU' (TABM . 'XXNORMAF') (TABMS . 'CENTRE') ;
  1957. AA = VALNOR '*' VALSUR ;
  1958. BB = 'MANUEL' 'CHPO' (TABM . 'FACE') 1 'SCAL' 1.0 ;
  1959. ERRO = 'XTY' AA BB ('MOTS' 'UX' 'UY' 'UZ')
  1960. ('MOTS' 'SCAL' 'SCAL' 'SCAL') ;
  1961. 'SI' (ERRO > 1.0D-12) ;
  1962. 'ERREUR' 'GENE';
  1963. 'FINSI' ;
  1964. *
  1965. LISTYP = (TABMS . 'MAILLAGE') 'ELEM' 'TYPE' ;
  1966. *
  1967. NELEM = 0 ;
  1968. 'REPETER' BL1 ('DIME' LISTYP) ;
  1969. MAIL1 = 'ELEM' (TABMS . 'MAILLAGE') ('EXTRAIRE' LISTYP &BL1) ;
  1970. 'REPETER' BL2 ('NBEL' MAIL1) ;
  1971. ELE1 = 'ELEM' MAIL1 &BL2 ;
  1972. AA = 'MESURE' ELE1 ;
  1973. NELEM = NELEM '+' 1;
  1974. P1 = 'POIN' (TABMS . 'CENTRE') NELEM ;
  1975. BB = 'EXTRAIRE' (TABMS . 'XXVOLUM') 'SCAL' P1 ;
  1976. ERRO = (AA '-' BB) 'ABS' ;
  1977. 'SI' (ERRO > 1.0D-6) ;
  1978. 'MESSAGE' 'GENE' ;
  1979. 'ERREUR' 21 ;
  1980. 'FINSI' ;
  1981. 'FIN' BL2 ;
  1982. 'FIN' BL1 ;
  1983.  
  1984. * Sommet
  1985.  
  1986. MAILS = 'CHANGER' MAIL 'POI1' ;
  1987. AA = 'DIFF' MAILS (TABM . 'SOMMET') ;
  1988. 'SI' (('NBNO' AA) > 0 ) ;
  1989. 'MESSAGE' 'GENE' ;
  1990. 'ERREUR' 21 ;
  1991. 'FINSI' ;
  1992.  
  1993.  
  1994. * FACEL, FACEP, ELTFA (comparaison 'NAVIER_STOKES' - 'EULER')
  1995.  
  1996. MOD2 = 'MODELISER' QMAIL 'NAVIER_STOKES' 'LINE' ;
  1997. TAB2 = 'DOMA' MOD2 'TABLE' ;
  1998.  
  1999. AA = 'DIFF' (TAB2 . 'FACE') (TABM . 'FACE') ;
  2000. 'SI' (('NBNO' AA) > 0 ) ;
  2001. 'MESSAGE' 'GENE' ;
  2002. 'ERREUR' 21 ;
  2003. 'FINSI' ;
  2004.  
  2005. AA = 'DIFF' (TAB2 . 'FACEL') (TABM . 'FACEL') ;
  2006. 'SI' (('NBNO' AA) > 0 ) ;
  2007. 'MESSAGE' 'TRI3 et QUA4' ;
  2008. 'ERREUR' 21 ;
  2009. 'FINSI' ;
  2010.  
  2011. AA = 'DIFF' (TAB2 . 'FACEP') (TABM . 'FACEP') ;
  2012. 'SI' (('NBNO' AA) > 0 ) ;
  2013. 'MESSAGE' 'TRI3 et QUA4' ;
  2014. 'ERREUR' 21 ;
  2015. 'FINSI' ;
  2016.  
  2017. MAIL1 = (TAB2 . 'ELTFA') ;
  2018. MAIL2 = (TABM . 'ELTFA') ;
  2019. AA = 'DIFF' MAIL1 MAIL2 ;
  2020. 'SI' (('NBNO' AA) > 0 ) ;
  2021. 'MESSAGE' 'TRI3 et QUA4' ;
  2022. 'ERREUR' 21 ;
  2023. 'FINSI' ;
  2024.  
  2025. * XXDIEMIN (comparaison 'NAVIER_STOKES' - 'EULER')
  2026.  
  2027. CHPO1 = 'ABS' (TABM . 'XXDIEMIN') ;
  2028. CHPO2 = 'ABS' ('DOMA' TAB2 'XXDIEMIN') ;
  2029. ERRO = 'MAXIMUM' (CHPO1 '-' CHPO2) 'ABS' ;
  2030. 'SI' (ERRO > 1.0D-6) ;
  2031. 'MESSAGE' 'TRI3 et QUA4' ;
  2032. 'ERREUR' 21 ;
  2033. 'FINSI' ;
  2034. *
  2035. * We check that the normals modulus are 1
  2036. *
  2037. VALNOR = TABM . 'XXNORMAF' ;
  2038. VALSUR = TABM . 'XXSURFAC' ;
  2039.  
  2040. AA = 'PSCAL' VALNOR VALNOR ('MOTS' 'UX' 'UY' 'UZ')
  2041. ('MOTS' 'UX' 'UY' 'UZ') ;
  2042. 'SI' ((('MAXIMUM' AA) 'NEG' 1.0 1.0D-12) 'OU'
  2043. (('MINIMUM' AA) 'NEG' 1.0 1.0D-12)) ;
  2044. 'ERREUR' 'CUB8' ;
  2045. 'FINSI' ;
  2046.  
  2047. *
  2048. * We check that each element satisfies the property
  2049. * (normals times surfaces) = zero
  2050. *
  2051. * ELTFA and MAIL have the same structure
  2052. *
  2053. LISTYP = (TABM . 'ELTFA') 'ELEM' 'TYPE' ;
  2054. LISTYP1 = (TABM . 'QUAF') 'ELEM' 'TYPE' ;
  2055. LISTYP0 = (TABM . 'MAILLAGE') 'ELEM' 'TYPE' ;
  2056. *
  2057. NELEM = 0 ;
  2058. * Volume as sum of single volumes
  2059. VOL = 0.0 ;
  2060. 'REPETER' BL1 ('DIME' LISTYP) ;
  2061. MAIL0 = 'ELEM' (TABM . 'MAILLAGE') ('EXTRAIRE' LISTYP0 &BL1) ;
  2062. MAIL1 = 'ELEM' (TABM . 'ELTFA') ('EXTRAIRE' LISTYP &BL1) ;
  2063. MAIL2 = 'ELEM' (TABM . 'QUAF') ('EXTRAIRE' LISTYP1 &BL1) ;
  2064. NM1 = 'NBEL' MAIL1 ;
  2065. NM2 = 'NBEL' MAIL2 ;
  2066. 'SI' ('NEG' NM1 NM2) ;
  2067. 'ERREUR' 21 ;
  2068. 'FINSI' ;
  2069. 'REPETER' BL2 ('NBEL' MAIL1) ;
  2070. NELEM = NELEM '+' 1 ;
  2071. ELEM1 = 'ELEM' MAIL0 &BL2 ;
  2072. ELE1 = 'ELEM' MAIL1 &BL2 ;
  2073. ELE2 = 'CHANGER' ELE1 'POI1' ;
  2074. NM2 = 'NBNO' ELE2 ;
  2075. ELE3 = 'ELEM' MAIL2 &BL2 ;
  2076. ELE4 = 'CHANGER' ELE3 'POI1' ;
  2077. NM4 = 'NBNO' ELE4 ;
  2078. ELE5 = 'DIFF' ELE4 ELE2 ;
  2079. NM5 = 'NBNO' ELE5 ;
  2080. 'SI' ('NEG' (NM2 '+' NM5) NM4) ;
  2081. 'ERREUR' 'QUAF and ELTFA non compatible' ;
  2082. 'ERREUR' 21 ;
  2083. 'FINSI' ;
  2084. MOD2 = 'MODELISER' ELEM1 'EULER' ;
  2085. TAB2 = 'DOMA' MOD2 'VF' ;
  2086. ELE7 = TAB2 . 'QUAF' ;
  2087. 'ELIMINATION' ELE3 ELE7 0.0001 ;
  2088. AA = 'DIFF' ELE7 ELE3 ;
  2089. 'SI' ('NEG' ('NBEL' AA) 0) ;
  2090. 'MESSAGE' 'GENE' ;
  2091. 'ERREUR' 'Anormale' ;
  2092. 'FINSI' ;
  2093. VOL = VOL '+' ('MAXIMUM' (TAB2 . 'XXVOLUM')) ;
  2094. PCEN = 'POIN' (TABM . 'CENTRE') NELEM ;
  2095. DSURF = 0.0 0.0 0.0 ;
  2096. 'REPETER' BL3 ('NBEL' ELE2) ;
  2097. PFAC = 'POIN' &BL3 ELE2 ;
  2098. SURFF = 'EXTRAIRE' (TABM . 'XXSURFAC') 'SCAL' PFAC ;
  2099. PNORM = ('EXTRAIRE' (TABM . 'XXNORMAF') 'UX' PFAC)
  2100. ('EXTRAIRE' (TABM . 'XXNORMAF') 'UY' PFAC)
  2101. ('EXTRAIRE' (TABM . 'XXNORMAF') 'UZ' PFAC) ;
  2102. PCF = PFAC 'MOIN' PCEN ;
  2103. DORIE = 'SIGNE' ('PSCAL' PNORM PCF) ;
  2104. DSURF = DSURF 'PLUS' (DORIE * PNORM * SURFF) ;
  2105. 'FIN' BL3 ;
  2106. AA = 'MAXIMUM' ('ABS' ('PROG' ('COORDONNEE' 1 DSURF)
  2107. ('COORDONNEE' 2 DSURF) ('COORDONNEE' 3 DSURF))) ;
  2108. 'SI' (AA > 1.0D-12) ;
  2109. 'MESSAGE' 'GENE' ;
  2110. 'ERREUR' 21 ;
  2111. 'FINSI' ;
  2112. 'FIN' BL2 ;
  2113. 'FIN' BL1 ;
  2114.  
  2115. *
  2116. * Volume
  2117. *
  2118. AA = 'MESURE' MAIL ;
  2119. CHPUN = 'MANUEL' 'CHPO' (TABM . 'CENTRE') 1 'SCAL' 1.0 ;
  2120. BB = 'XTY' (TABM . 'XXVOLUM') CHPUN ('MOTS' 'SCAL') ('MOTS' 'SCAL') ;
  2121. ERRO = (AA '-' BB) 'ABS' ;
  2122. 'SI' (ERRO > 5.0D-6) ;
  2123. 'MESSAGE' 'GENE' ;
  2124. 'ERREUR' 21 ;
  2125. 'FINSI' ;
  2126. ERRO = VOL '-' BB ;
  2127. 'SI' (ERRO > 5.0D-6) ;
  2128. 'MESSAGE' 'GENE' ;
  2129. 'ERREUR' 21 ;
  2130. 'FINSI' ;
  2131.  
  2132. *
  2133. * Matrot
  2134. *
  2135. AA = 'EXCO' (TABM . 'MATROT') ('MOTS' 'MX' 'MY' 'MZ')
  2136. ('MOTS' 'UX' 'UY' 'UZ') ;
  2137. ERRO ='MAXIMUM' (AA '-' (TABM . 'XXNORMAF')) 'ABS' ;
  2138. 'SI' (ERRO > 1.0D-12) ;
  2139. 'ERREUR' ('CHAIN' 'Problem ' ('VALEUR' 'ELEM')) ;
  2140. 'FINSI' ;
  2141. *
  2142. BB = 'EXCO' (TABM . 'MATROT') ('MOTS' 'RX' 'RY' 'RZ')
  2143. ('MOTS' 'UX' 'UY' 'UZ') ;
  2144. ERRO = 'MAXIMUM' ('PSCAL' AA BB ('MOTS' 'UX' 'UY' 'UZ')
  2145. ('MOTS' 'UX' 'UY' 'UZ'))
  2146. 'ABS' ;
  2147. 'SI' (ERRO > 1.0D-12) ;
  2148. 'ERREUR' ('CHAIN' 'Problem ' ('VALEUR' 'ELEM')) ;
  2149. 'FINSI' ;
  2150. *
  2151. COMPZ = 'PSCAL' AA BB ('MOTS' 'UX') ('MOTS' 'UY') ;
  2152. COMPZ = COMPZ '-' ('PSCAL' AA BB ('MOTS' 'UY') ('MOTS' 'UX')) ;
  2153. COMPZ1 = 'EXCO' (TABM . 'MATROT') ('MOTS' 'UZ')
  2154. ('MOTS' 'SCAL') ;
  2155. ERRO = 'MAXIMUM' (COMPZ '-' COMPZ1) 'ABS' ;
  2156. 'SI' (ERRO > 1.0D-12) ;
  2157. 'ERREUR' ('CHAIN' 'Problem ' ('VALEUR' 'ELEM')) ;
  2158. 'FINSI' ;
  2159. *
  2160. COMPX = 'PSCAL' AA BB ('MOTS' 'UY') ('MOTS' 'UZ') ;
  2161. COMPX = COMPX '-' ('PSCAL' AA BB ('MOTS' 'UZ') ('MOTS' 'UY')) ;
  2162. COMPX1 = 'EXCO' (TABM . 'MATROT') ('MOTS' 'UX')
  2163. ('MOTS' 'SCAL') ;
  2164. ERRO = 'MAXIMUM' (COMPX '-' COMPX1) 'ABS' ;
  2165. 'SI' (ERRO > 1.0D-12) ;
  2166. 'ERREUR' ('CHAIN' 'Problem ' ('VALEUR' 'ELEM')) ;
  2167. 'FINSI' ;
  2168. *
  2169. COMPY = 'PSCAL' AA BB ('MOTS' 'UZ') ('MOTS' 'UX') ;
  2170. COMPY = COMPY '-' ('PSCAL' AA BB ('MOTS' 'UX') ('MOTS' 'UZ')) ;
  2171. COMPY1 = 'EXCO' (TABM . 'MATROT') ('MOTS' 'UY')
  2172. ('MOTS' 'SCAL') ;
  2173. ERRO = 'MAXIMUM' (COMPY '-' COMPY1) 'ABS' ;
  2174. 'SI' (ERRO > 1.0D-12) ;
  2175. 'ERREUR' ('CHAIN' 'Problem ' ('VALEUR' 'ELEM')) ;
  2176. 'FINSI' ;
  2177.  
  2178. 'FIN' ;
  2179.  
  2180.  
  2181.  
  2182.  
  2183.  
  2184.  
  2185.  
  2186.  
  2187.  

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