Télécharger pret_gfmp.dgibi

Retour à la liste

Numérotation des lignes :

  1. * fichier : pret_gfmp.dgibi
  2. ************************************************************************
  3. ************************************************************************
  4. **********************************************************************
  5. **** APPROCHE VF "Cell-Centred Formulation" pour la solution des ****
  6. **** Equations d'Euler. ****
  7. **** "Ghost Fluid Method for the Poor" ****
  8. **** ****
  9. **** OPERATEUR PRET ****
  10. **** Operateur qui 'recontruit les variables primitives aux faces ****
  11. **** "Stiffened gas" ****
  12. **** Interieur et murs ****
  13. **** ****
  14. **** A. BECCANTINI DEN/DM2S/SFME/LTMF MAI 2011 ****
  15. **********************************************************************
  16.  
  17. 'OPTION' 'DIME' 2 'ELEM' QUA4 'ECHO' 1
  18. 'TRAC' 'X' ;
  19.  
  20. *
  21. *** GRAPH
  22. *
  23.  
  24. GRAPH = VRAI ;
  25. GRAPH = FAUX ;
  26.  
  27.  
  28. ***************************
  29. ***** DOMAINE SPATIAL ****
  30. ***************************
  31.  
  32. *
  33. **** Deux carre
  34. *
  35.  
  36. A1 = 0.0D0 0.0D0;
  37. A2 = 2.0D0 0.0D0;
  38. A3 = 2.2D0 0.0D0;
  39. A4 = 2.0D0 0.8D0;
  40. A5 = 1.0D0 0.90D0;
  41. A6 = 0.0D0 1.1D0;
  42.  
  43. L12 = A1 'DROIT' 1 A2;
  44. L23 = A2 'DROIT' 1 A3;
  45. L34 = A3 'DROIT' 1 A4;
  46. L45 = A4 'DROIT' 1 A5;
  47. L56 = A5 'DROIT' 1 A6;
  48. L61 = A6 'DROIT' 1 A1;
  49. L25 = A2 'DROIT' 1 A5;
  50.  
  51.  
  52. DOM10 = 'DALL' L12 L25 L56 L61
  53. 'PLANE';
  54. DOM20 = 'DALL' L23 L34 L45 ('INVERSE' L25)
  55. 'PLANE';
  56.  
  57.  
  58. *
  59. *** Etats a gauche et a droite
  60. *
  61. *
  62.  
  63. al1g = 0.9 ; limgal1 = 0.11 ;
  64. rn1g = 1.10 ; limgrn1 = 0.21 ;
  65. ux1g = 130. ; limgux1 = 0.31 ;
  66. uy1g = 111. ; limguy1 = 0.41 ;
  67. pn1g = 1.13E5 ; limgpn1 = 0.51 ;
  68.  
  69. xgragal1 = 11.0D-2 ; ygragal1 = 12.0D-2 ;
  70. xgragrn1 = 13.0D-1 ; ygragrn1 = 11.0D-1 ;
  71. xgragux1 = 15.0 ; ygragux1 = 12.0 ;
  72. xgraguy1 = 17.0 ; ygraguy1 = 19.0 ;
  73. xgragpn1 = 21.0D2 ; ygragpn1 = 21.2D2 ;
  74.  
  75. al1d = 0.8 ; limdal1 = 0.17 ;
  76. rn1d = 1.31 ; limdrn1 = 0.19 ;
  77. ux1d = 230. ; limdux1 = 0.22 ;
  78. uy1d = 431. ; limduy1 = 0.32 ;
  79. pn1d = 1.31E5 ; limdpn1 = 0.42 ;
  80.  
  81. xgradal1 = 11.0D-2 ; ygradal1 = 11.2D-2 ;
  82. xgradrn1 = 21.0D-1 ; ygradrn1 = 21.2D-1 ;
  83. xgradux1 = 31.0 ; ygradux1 = 31.2 ;
  84. xgraduy1 = 41.0 ; ygraduy1 = 41.3 ;
  85. xgradpn1 = 51.0D1 ; ygradpn1 = 51.2D1 ;
  86.  
  87. ETATG = 'PROG' al1g rn1g ux1g uy1g pn1g ;
  88.  
  89. ETATD = 'PROG' al1d rn1d ux1d uy1d pn1d ;
  90.  
  91. DOM1 = DOM10 ;
  92. DOM2 = DOM20 ;
  93.  
  94. DOMTOT = DOM1 ET DOM2;
  95. 'ELIMINATION' (DOM1 ET DOM2) 1D-6;
  96.  
  97. $DOMTOT = 'MODELISER' DOMTOT 'EULER';
  98.  
  99. $DOM1 = 'MODELISER' DOM1 'EULER';
  100. $DOM2 = 'MODELISER' DOM2 'EULER';
  101. $L25 = 'MODELISER' L25 'EULER';
  102. $L12 = 'MODELISER' L12 'EULER';
  103.  
  104. TDOMTOT = 'DOMA' $DOMTOT 'VF';
  105. TDOM1 = 'DOMA' $DOM1 'VF';
  106. TDOM2 = 'DOMA' $DOM2 'VF';
  107. TL25 = 'DOMA' $L25 'VF';
  108. TL12 = 'DOMA' $L12 'VF';
  109.  
  110. MDOM1 = TDOM1 . 'QUAF' ;
  111. MDOM2 = TDOM2 . 'QUAF' ;
  112. MDOMTOT = TDOMTOT . 'QUAF' ;
  113. ML25 = TL25 . 'QUAF' ;
  114. ML12 = TL12 . 'QUAF' ;
  115.  
  116. 'ELIMINATION' (MDOMTOT ET MDOM1 ET ML25) 0.0001 ;
  117. 'ELIMINATION' (MDOMTOT ET MDOM2 ET ML12) 0.0001 ;
  118.  
  119. P1 = 'POIN' 1 (TL25 . 'CENTRE') ;
  120. P2 = 'POIN' 1 (TL12 . 'CENTRE') ;
  121.  
  122. 'SI' GRAPH;
  123. 'TRACER' (('DOMA' $DOMTOT 'MAILLAGE') 'ET'
  124. ('MANUEL' 'POI1' P1 'COULEUR' 'ROUG') 'ET'
  125. ('MANUEL' 'POI1' P2 'COULEUR' 'ROUG'))
  126. 'TITRE' 'Domaine et points';
  127. 'FINSI' ;
  128.  
  129. **** La densité, la pression, la vitesse
  130.  
  131. AL1 = ('MANU' 'CHPO' (TDOM1 . 'CENTRE') 1 'SCAL' al1g) '+'
  132. ('MANU' 'CHPO' (TDOM2 . 'CENTRE') 1 'SCAL' al1d) ;
  133. GRADAL1 = ('MANU' 'CHPO' (TDOM1 . 'CENTRE') 2
  134. 'P1DX' xgragal1 'P1DY' ygragal1) '+'
  135. ('MANU' 'CHPO' (TDOM2 . 'CENTRE') 2
  136. 'P1DX' xgradal1 'P1DY' ygradal1)
  137. ;
  138. LIMAL1 = ('MANU' 'CHPO' (TDOM1 . 'CENTRE') 1 'P1' limgal1) '+'
  139. ('MANU' 'CHPO' (TDOM2 . 'CENTRE') 1 'P1' limdal1) ;
  140.  
  141. RN1 = ('MANU' 'CHPO' (TDOM1 . 'CENTRE') 1 'SCAL' rn1g) '+'
  142. ('MANU' 'CHPO' (TDOM2 . 'CENTRE') 1 'SCAL' rn1d) ;
  143. GRADRN1 = ('MANU' 'CHPO' (TDOM1 . 'CENTRE') 2
  144. 'P1DX' xgragrn1 'P1DY' ygragrn1) '+'
  145. ('MANU' 'CHPO' (TDOM2 . 'CENTRE') 2
  146. 'P1DX' xgradrn1 'P1DY' ygradrn1)
  147. ;
  148. LIMRN1 = ('MANU' 'CHPO' (TDOM1 . 'CENTRE') 1 'P1' limgrn1) '+'
  149. ('MANU' 'CHPO' (TDOM2 . 'CENTRE') 1 'P1' limdrn1) ;
  150.  
  151. PN1 = ('MANU' 'CHPO' (TDOM1 . 'CENTRE') 1 'SCAL' pn1g) '+'
  152. ('MANU' 'CHPO' (TDOM2 . 'CENTRE') 1 'SCAL' pn1d) ;
  153. GRADPN1 = ('MANU' 'CHPO' (TDOM1 . 'CENTRE') 2
  154. 'P1DX' xgragpn1 'P1DY' ygragpn1) '+'
  155. ('MANU' 'CHPO' (TDOM2 . 'CENTRE') 2
  156. 'P1DX' xgradpn1 'P1DY' ygradpn1)
  157. ;
  158. LIMPN1 = ('MANU' 'CHPO' (TDOM1 . 'CENTRE') 1 'P1' limgpn1) '+'
  159. ('MANU' 'CHPO' (TDOM2 . 'CENTRE') 1 'P1' limdpn1) ;
  160.  
  161.  
  162. UXN1 = ('MANU' 'CHPO' (TDOM1 . 'CENTRE') 1 'UX' ux1g) '+'
  163. ('MANU' 'CHPO' (TDOM2 . 'CENTRE') 1 'UX' ux1d) ;
  164. GRADUX1 = ('MANU' 'CHPO' (TDOM1 . 'CENTRE') 2
  165. 'P1DX' xgragux1 'P1DY' ygragux1) '+'
  166. ('MANU' 'CHPO' (TDOM2 . 'CENTRE') 2
  167. 'P1DX' xgradux1 'P1DY' ygradux1)
  168. ;
  169. LIMUX1 = ('MANU' 'CHPO' (TDOM1 . 'CENTRE') 1 'P1' limgux1) '+'
  170. ('MANU' 'CHPO' (TDOM2 . 'CENTRE') 1 'P1' limdux1) ;
  171.  
  172.  
  173. UYN1 = ('MANU' 'CHPO' (TDOM1 . 'CENTRE') 1 'UY' uy1g) '+'
  174. ('MANU' 'CHPO' (TDOM2 . 'CENTRE') 1 'UY' uy1d) ;
  175. GRADUY1 = ('MANU' 'CHPO' (TDOM1 . 'CENTRE') 2
  176. 'P2DX' xgraguy1 'P2DY' ygraguy1) '+'
  177. ('MANU' 'CHPO' (TDOM2 . 'CENTRE') 2
  178. 'P2DX' xgraduy1 'P2DY' ygraduy1)
  179. ;
  180. LIMUY1 = ('MANU' 'CHPO' (TDOM1 . 'CENTRE') 1 'P2' limguy1) '+'
  181. ('MANU' 'CHPO' (TDOM2 . 'CENTRE') 1 'P2' limduy1) ;
  182.  
  183. VN1 = UXN1 '+' UYN1 ;
  184. GRADVN1 = GRADUX1 '+' GRADUY1 ;
  185. LIMVN1 = LIMUX1 '+' LIMUY1 ;
  186.  
  187.  
  188. *************************************************************************
  189. *** We check if the reconstruction degenerates to first order as the ****
  190. *** gradients or the limiters are zero ****
  191. *************************************************************************
  192.  
  193. NESP = 'MOTS' ;
  194.  
  195. AL1G0 RN1G0 VN1G0 PN1G0 =
  196. 'PRET' 'GFMP' NESP $DOMTOT
  197. AL1 (0.0 * GRADAL1) LIMAL1
  198. RN1 (0.0 * GRADRN1) LIMRN1
  199. VN1 (0.0 * GRADVN1) LIMVN1
  200. PN1 (0.0 * GRADPN1) LIMPN1
  201. ;
  202.  
  203. AL1L0 RN1L0 VN1L0 PN1L0 =
  204. 'PRET' 'GFMP' NESP $DOMTOT
  205. AL1 GRADAL1 (0.0 * LIMAL1)
  206. RN1 GRADRN1 (0.0 * LIMRN1)
  207. VN1 GRADVN1 (0.0 * LIMVN1)
  208. PN1 GRADPN1 (0.0 * LIMPN1)
  209. ;
  210.  
  211. ERRO = 'PROG' ;
  212. ERRO = ERRO 'ET' ('PROG' ('MAXIMUM' (AL1G0 '-' AL1L0) 'ABS'));
  213. ERRO = ERRO 'ET' ('PROG' ('MAXIMUM' (RN1G0 '-' RN1L0) 'ABS'));
  214. ERRO = ERRO 'ET' ('PROG' ('MAXIMUM' (VN1G0 '-' VN1L0) 'ABS'));
  215. ERRO = ERRO 'ET' ('PROG' ('MAXIMUM' (PN1G0 '-' PN1L0) 'ABS'));
  216.  
  217.  
  218. ERRO = 'MAXIMUM' ERRO 'ABS' ;
  219. 'SI' (ERRO > 1.0D-16) ;
  220. 'MESSAGE' 'Limiteur et gradients zero' ;
  221. 'MESSAGE' 'Erreur trop importante' ;
  222. 'MESSAGE' ('CHAINE' 'erro = ' ERRO) ;
  223. 'ERREUR' 5 ;
  224. 'FINSI' ;
  225. *
  226. *** Control des etats sur la surface qui contient P1
  227. *
  228.  
  229. GEOP1 = ('DOMA' $DOMTOT 'FACEL') 'ELEM' 'APPUYE' 'LARGEMENT' P1;
  230. GEP1F = ('DOMA' $DOMTOT 'FACE') 'ELEM' 'APPUYE' 'LARGEMENT' P1;
  231.  
  232. AL1GEOP1 = 'REDU' AL1G0 GEOP1;
  233. RN1GEOP1 = 'REDU' RN1G0 GEOP1;
  234. PN1GEOP1 = 'REDU' PN1G0 GEOP1;
  235. VN1GEOP1 = 'REDU' VN1G0 GEOP1;
  236. TN1GEP1F = 'REDU' VN1G0 GEP1F;
  237.  
  238. al1gp1 = 'EXTRAIRE' AL1GEOP1 'SCAL' 1 1 1 ;
  239. al1dp1 = 'EXTRAIRE' AL1GEOP1 'SCAL' 1 1 3 ;
  240. rn1gp1 = 'EXTRAIRE' RN1GEOP1 'SCAL' 1 1 1 ;
  241. rn1dp1 = 'EXTRAIRE' RN1GEOP1 'SCAL' 1 1 3 ;
  242. pn1gp1 = 'EXTRAIRE' PN1GEOP1 'SCAL' 1 1 1 ;
  243. pn1dp1 = 'EXTRAIRE' PN1GEOP1 'SCAL' 1 1 3 ;
  244. un1gp1 = 'EXTRAIRE' VN1GEOP1 'UN ' 1 1 1 ;
  245. un1dp1 = 'EXTRAIRE' VN1GEOP1 'UN ' 1 1 3 ;
  246. ut1gp1 = 'EXTRAIRE' VN1GEOP1 'UT ' 1 1 1 ;
  247. ut1dp1 = 'EXTRAIRE' VN1GEOP1 'UT ' 1 1 3 ;
  248. nxp1 = 'EXTRAIRE' TN1GEP1F 'NX ' 1 1 1 ;
  249. nyp1 = 'EXTRAIRE' TN1GEP1F 'NY ' 1 1 1 ;
  250. txp1 = 'EXTRAIRE' TN1GEP1F 'TX ' 1 1 1 ;
  251. typ1 = 'EXTRAIRE' TN1GEP1F 'TY ' 1 1 1 ;
  252. ux1gp1 = (un1gp1 * nxp1) '+' (ut1gp1 * txp1) ;
  253. uy1gp1 = (un1gp1 * nyp1) '+' (ut1gp1 * typ1) ;
  254. ux1dp1 = (un1dp1 * nxp1) '+' (ut1dp1 * txp1) ;
  255. uy1dp1 = (un1dp1 * nyp1) '+' (ut1dp1 * typ1) ;
  256.  
  257. ERRO = 'PROG' ;
  258. ERRO = ERRO 'ET' ('PROG' ((al1gp1 '-' al1g) 'ABS'));
  259. ERRO = ERRO 'ET' ('PROG' ((al1dp1 '-' al1d) 'ABS'));
  260. ERRO = ERRO 'ET' ('PROG' ((rn1gp1 '-' rn1g) 'ABS'));
  261. ERRO = ERRO 'ET' ('PROG' ((rn1dp1 '-' rn1d) 'ABS'));
  262. ERRO = ERRO 'ET' ('PROG' ((pn1gp1 '-' pn1g) 'ABS'));
  263. ERRO = ERRO 'ET' ('PROG' ((pn1dp1 '-' pn1d) 'ABS'));
  264. ERRO = ERRO 'ET' ('PROG' ((ux1gp1 '-' ux1g) 'ABS'));
  265. ERRO = ERRO 'ET' ('PROG' ((ux1dp1 '-' ux1d) 'ABS'));
  266. ERRO = ERRO 'ET' ('PROG' ((uy1gp1 '-' uy1g) 'ABS'));
  267. ERRO = ERRO 'ET' ('PROG' ((uy1dp1 '-' uy1d) 'ABS'));
  268.  
  269. ERRO = 'MAXIMUM' ERRO 'ABS' ;
  270. 'SI' (ERRO > 1.0D-12) ;
  271. 'MESSAGE' 'Limiteur et gradients zero' ;
  272. 'MESSAGE' 'Les etats' ;
  273. 'MESSAGE' 'Erreur trop importante' ;
  274. 'MESSAGE' ('CHAINE' 'erro = ' ERRO) ;
  275. 'ERREUR' 5 ;
  276. 'FINSI' ;
  277. *
  278. **** Wall
  279. *
  280.  
  281. GEOP2 = ('DOMA' $DOMTOT 'FACEL') 'ELEM' 'APPUYE' 'LARGEMENT' P2;
  282. GEP2F = ('DOMA' $DOMTOT 'FACE') 'ELEM' 'APPUYE' 'LARGEMENT' P2;
  283.  
  284. AL1GEOP2 = 'REDU' AL1G0 GEOP2;
  285. RN1GEOP2 = 'REDU' RN1G0 GEOP2;
  286. PN1GEOP2 = 'REDU' PN1G0 GEOP2;
  287. VN1GEOP2 = 'REDU' VN1G0 GEOP2;
  288. TN1GEP2F = 'REDU' VN1G0 GEP2F;
  289.  
  290. al1gp2 = 'EXTRAIRE' AL1GEOP2 'SCAL' 1 1 1 ;
  291. al1dp2 = 'EXTRAIRE' AL1GEOP2 'SCAL' 1 1 3 ;
  292. rn1gp2 = 'EXTRAIRE' RN1GEOP2 'SCAL' 1 1 1 ;
  293. rn1dp2 = 'EXTRAIRE' RN1GEOP2 'SCAL' 1 1 3 ;
  294. pn1gp2 = 'EXTRAIRE' PN1GEOP2 'SCAL' 1 1 1 ;
  295. pn1dp2 = 'EXTRAIRE' PN1GEOP2 'SCAL' 1 1 3 ;
  296. un1gp2 = 'EXTRAIRE' VN1GEOP2 'UN ' 1 1 1 ;
  297. un1dp2 = 'EXTRAIRE' VN1GEOP2 'UN ' 1 1 3 ;
  298. ut1gp2 = 'EXTRAIRE' VN1GEOP2 'UT ' 1 1 1 ;
  299. ut1dp2 = 'EXTRAIRE' VN1GEOP2 'UT ' 1 1 3 ;
  300.  
  301. ERRO = 'PROG' ;
  302. ERRO = ERRO 'ET' ('PROG' ((al1gp2 '-' al1dp2) 'ABS'));
  303. ERRO = ERRO 'ET' ('PROG' ((rn1gp2 '-' rn1dp2) 'ABS'));
  304. ERRO = ERRO 'ET' ('PROG' ((pn1gp2 '-' pn1dp2) 'ABS'));
  305. ERRO = ERRO 'ET' ('PROG' ((ut1gp2 '-' ut1dp2) 'ABS'));
  306. ERRO = ERRO 'ET' ('PROG' ((un1gp2 '+' un1dp2) 'ABS'));
  307.  
  308.  
  309. ERRO = 'MAXIMUM' ERRO 'ABS' ;
  310. 'SI' (ERRO > 1.0D-16) ;
  311. 'MESSAGE' 'Limiteur et gradients zero' ;
  312. 'MESSAGE' 'Les etats (mur)' ;
  313. 'MESSAGE' 'Erreur trop importante' ;
  314. 'MESSAGE' ('CHAINE' 'erro = ' ERRO) ;
  315. 'ERREUR' 5 ;
  316. 'FINSI' ;
  317.  
  318. *****************************************************
  319. *** We check the second order reconstruction. *******
  320. *****************************************************
  321.  
  322. AL1F RN1F VN1F PN1F =
  323. 'PRET' 'GFMP' NESP $DOMTOT
  324. AL1 GRADAL1 LIMAL1
  325. RN1 GRADRN1 LIMRN1
  326. VN1 GRADVN1 LIMVN1
  327. PN1 GRADPN1 LIMPN1
  328. ;
  329.  
  330. *** Internal point
  331.  
  332. GEOP1 = ('DOMA' $DOMTOT 'FACEL') 'ELEM' 'APPUYE' 'LARGEMENT' P1;
  333. GEP1F = ('DOMA' $DOMTOT 'FACE') 'ELEM' 'APPUYE' 'LARGEMENT' P1;
  334.  
  335. AL1GEOP1 = 'REDU' AL1F GEOP1;
  336. RN1GEOP1 = 'REDU' RN1F GEOP1;
  337. PN1GEOP1 = 'REDU' PN1F GEOP1;
  338. VN1GEOP1 = 'REDU' VN1F GEOP1;
  339. TN1GEP1F = 'REDU' VN1F GEP1F;
  340.  
  341. al1gp1 = 'EXTRAIRE' AL1GEOP1 'SCAL' 1 1 1 ;
  342. al1dp1 = 'EXTRAIRE' AL1GEOP1 'SCAL' 1 1 3 ;
  343. rn1gp1 = 'EXTRAIRE' RN1GEOP1 'SCAL' 1 1 1 ;
  344. rn1dp1 = 'EXTRAIRE' RN1GEOP1 'SCAL' 1 1 3 ;
  345. pn1gp1 = 'EXTRAIRE' PN1GEOP1 'SCAL' 1 1 1 ;
  346. pn1dp1 = 'EXTRAIRE' PN1GEOP1 'SCAL' 1 1 3 ;
  347. un1gp1 = 'EXTRAIRE' VN1GEOP1 'UN ' 1 1 1 ;
  348. un1dp1 = 'EXTRAIRE' VN1GEOP1 'UN ' 1 1 3 ;
  349. ut1gp1 = 'EXTRAIRE' VN1GEOP1 'UT ' 1 1 1 ;
  350. ut1dp1 = 'EXTRAIRE' VN1GEOP1 'UT ' 1 1 3 ;
  351. nxp1 = 'EXTRAIRE' TN1GEP1F 'NX ' 1 1 1 ;
  352. nyp1 = 'EXTRAIRE' TN1GEP1F 'NY ' 1 1 1 ;
  353. txp1 = 'EXTRAIRE' TN1GEP1F 'TX ' 1 1 1 ;
  354. typ1 = 'EXTRAIRE' TN1GEP1F 'TY ' 1 1 1 ;
  355. ux1gp1 = (un1gp1 * nxp1) '+' (ut1gp1 * txp1) ;
  356. uy1gp1 = (un1gp1 * nyp1) '+' (ut1gp1 * typ1) ;
  357. ux1dp1 = (un1dp1 * nxp1) '+' (ut1dp1 * txp1) ;
  358. uy1dp1 = (un1dp1 * nyp1) '+' (ut1dp1 * typ1) ;
  359.  
  360. * Selection of the left and the right state
  361.  
  362. MAICEN = 'DIFF' ('CHANGER' 'POI1' GEOP1) GEP1F ;
  363. 'SI' (('NBNO' MAICEN) 'NEG' 2) ;
  364. 'MESSAGE' 'Probleme en maicen' ;
  365. 'ERREUR' 5 ;
  366. 'FINSI' ;
  367.  
  368. PC1 = 'POIN' 1 MAICEN ;
  369. PC2 = 'POIN' 2 MAICEN ;
  370. DXPC1 = ('COORDONNEE' 1 P1) '-' ('COORDONNEE' 1 PC1) ;
  371. DYPC1 = ('COORDONNEE' 2 P1) '-' ('COORDONNEE' 2 PC1) ;
  372. DXPC2 = ('COORDONNEE' 1 P1) '-' ('COORDONNEE' 1 PC2) ;
  373. DYPC2 = ('COORDONNEE' 2 P1) '-' ('COORDONNEE' 2 PC2) ;
  374. PSPC1 = (DXPC1 * nxp1) '+' (DYPC1 * nyp1) ;
  375. PSPC2 = (DXPC2 * nxp1) '+' (DYPC2 * nyp1) ;
  376. LOG1 = (PSPC1 > 0.0) 'ET' (PSPC2 < 0.0) ;
  377. 'SI' LOG1 ;
  378. PG = PC1 ;
  379. DXG = DXPC1 ;
  380. DYG = DYPC1 ;
  381. PD = PC2 ;
  382. DXD = DXPC2 ;
  383. DYD = DYPC2 ;
  384. 'FINSI' ;
  385. LOG2 = (PSPC1 < 0.0) 'ET' (PSPC2 > 0.0) ;
  386. 'SI' LOG2 ;
  387. PG = PC2 ;
  388. DXG = DXPC2 ;
  389. DYG = DYPC2 ;
  390. PD = PC1 ;
  391. DXD = DXPC1 ;
  392. DYD = DYPC1 ;
  393. 'FINSI' ;
  394. 'SI' (('NON' LOG1) 'ET' ('NON' LOG2)) ;
  395. 'MESSAGE' 'Probleme en facel' ;
  396. 'ERREUR' 5 ;
  397. 'FINSI' ;
  398.  
  399. al1gn = ('EXTRAIRE' AL1 'SCAL' PG) '+' (
  400. (
  401. (('EXTRAIRE' GRADAL1 'P1DX' PG) * DXG) '+'
  402. (('EXTRAIRE' GRADAL1 'P1DY' PG) * DYG)
  403. ) * ('EXTRAIRE' LIMAL1 'P1' PG)) ;
  404. rn1gn = ('EXTRAIRE' RN1 'SCAL' PG) '+' (
  405. (
  406. (('EXTRAIRE' GRADRN1 'P1DX' PG) * DXG) '+'
  407. (('EXTRAIRE' GRADRN1 'P1DY' PG) * DYG)
  408. ) * ('EXTRAIRE' LIMRN1 'P1' PG)) ;
  409. pn1gn = ('EXTRAIRE' PN1 'SCAL' PG) '+' (
  410. (
  411. (('EXTRAIRE' GRADPN1 'P1DX' PG) * DXG) '+'
  412. (('EXTRAIRE' GRADPN1 'P1DY' PG) * DYG)
  413. ) * ('EXTRAIRE' LIMPN1 'P1' PG)) ;
  414. ux1gn = ('EXTRAIRE' VN1 'UX ' PG) '+' (
  415. (
  416. (('EXTRAIRE' GRADUX1 'P1DX' PG) * DXG) '+'
  417. (('EXTRAIRE' GRADUX1 'P1DY' PG) * DYG)
  418. ) * ('EXTRAIRE' LIMUX1 'P1' PG)) ;
  419. uy1gn = ('EXTRAIRE' VN1 'UY ' PG) '+' (
  420. (
  421. (('EXTRAIRE' GRADUY1 'P2DX' PG) * DXG) '+'
  422. (('EXTRAIRE' GRADUY1 'P2DY' PG) * DYG)
  423. ) * ('EXTRAIRE' LIMUY1 'P2' PG)) ;
  424.  
  425. ERRO = 'PROG' ;
  426. ERRO = ERRO 'ET' ('PROG' ((al1gp1 '-' al1gn) 'ABS'));
  427. ERRO = ERRO 'ET' ('PROG' ((rn1gp1 '-' rn1gn) 'ABS'));
  428. ERRO = ERRO 'ET' ('PROG' ((pn1gp1 '-' pn1gn) 'ABS'));
  429. ERRO = ERRO 'ET' ('PROG' ((ux1gp1 '-' ux1gn) 'ABS'));
  430. ERRO = ERRO 'ET' ('PROG' ((uy1gp1 '-' uy1gn) 'ABS'));
  431. ERRO = 'MAXIMUM' ERRO 'ABS' ;
  432.  
  433.  
  434. 'SI' (ERRO > 1.0D-13) ;
  435. 'MESSAGE' 'Deuxieme ordre' ;
  436. 'MESSAGE' 'Les etats gauches' ;
  437. 'MESSAGE' 'Erreur trop importante' ;
  438. 'MESSAGE' ('CHAINE' 'erro = ' ERRO) ;
  439. 'ERREUR' 5 ;
  440. 'FINSI' ;
  441.  
  442.  
  443.  
  444. al1dn = ('EXTRAIRE' AL1 'SCAL' PD) '+' (
  445. (
  446. (('EXTRAIRE' GRADAL1 'P1DX' PD) * DXD) '+'
  447. (('EXTRAIRE' GRADAL1 'P1DY' PD) * DYD)
  448. ) * ('EXTRAIRE' LIMAL1 'P1' PD)) ;
  449. rn1dn = ('EXTRAIRE' RN1 'SCAL' PD) '+' (
  450. (
  451. (('EXTRAIRE' GRADRN1 'P1DX' PD) * DXD) '+'
  452. (('EXTRAIRE' GRADRN1 'P1DY' PD) * DYD)
  453. ) * ('EXTRAIRE' LIMRN1 'P1' PD)) ;
  454. pn1dn = ('EXTRAIRE' PN1 'SCAL' PD) '+' (
  455. (
  456. (('EXTRAIRE' GRADPN1 'P1DX' PD) * DXD) '+'
  457. (('EXTRAIRE' GRADPN1 'P1DY' PD) * DYD)
  458. ) * ('EXTRAIRE' LIMPN1 'P1' PD)) ;
  459. ux1dn = ('EXTRAIRE' VN1 'UX ' PD) '+' (
  460. (
  461. (('EXTRAIRE' GRADUX1 'P1DX' PD) * DXD) '+'
  462. (('EXTRAIRE' GRADUX1 'P1DY' PD) * DYD)
  463. ) * ('EXTRAIRE' LIMUX1 'P1' PD)) ;
  464. uy1dn = ('EXTRAIRE' VN1 'UY ' PD) '+' (
  465. (
  466. (('EXTRAIRE' GRADUY1 'P2DX' PD) * DXD) '+'
  467. (('EXTRAIRE' GRADUY1 'P2DY' PD) * DYD)
  468. ) * ('EXTRAIRE' LIMUY1 'P2' PD)) ;
  469.  
  470. ERRO = 'PROG' ;
  471. ERRO = ERRO 'ET' ('PROG' ((al1dp1 '-' al1dn) 'ABS'));
  472. ERRO = ERRO 'ET' ('PROG' ((rn1dp1 '-' rn1dn) 'ABS'));
  473. ERRO = ERRO 'ET' ('PROG' ((pn1dp1 '-' pn1dn) 'ABS'));
  474. ERRO = ERRO 'ET' ('PROG' ((ux1dp1 '-' ux1dn) 'ABS'));
  475. ERRO = ERRO 'ET' ('PROG' ((uy1dp1 '-' uy1dn) 'ABS'));
  476. ERRO = 'MAXIMUM' ERRO 'ABS' ;
  477. 'SI' (ERRO > 1.0D-13) ;
  478. 'MESSAGE' 'Deuxieme ordre' ;
  479. 'MESSAGE' 'Les etats droites' ;
  480. 'MESSAGE' 'Erreur trop importante' ;
  481. 'MESSAGE' ('CHAINE' 'erro = ' ERRO) ;
  482. 'ERREUR' 5 ;
  483. 'FINSI' ;
  484.  
  485. *** Wall point
  486.  
  487. GEOP2 = ('DOMA' $DOMTOT 'FACEL') 'ELEM' 'APPUYE' 'LARGEMENT' P2;
  488. GEP2F = ('DOMA' $DOMTOT 'FACE') 'ELEM' 'APPUYE' 'LARGEMENT' P2;
  489.  
  490. 'SI' GRAPH ;
  491. 'TRACER' (DOMTOT 'ET' ('MANUEL' 'POI1' P2 'COULEUR' 'ROUG'))
  492. 'TITRE' 'Wall' ;
  493. 'FINSI' ;
  494.  
  495. AL1GEOP2 = 'REDU' AL1F GEOP2;
  496. RN1GEOP2 = 'REDU' RN1F GEOP2;
  497. PN1GEOP2 = 'REDU' PN1F GEOP2;
  498. VN1GEOP2 = 'REDU' VN1F GEOP2;
  499. TN1GEP2F = 'REDU' VN1F GEP2F;
  500.  
  501. al1gp2 = 'EXTRAIRE' AL1GEOP2 'SCAL' 1 1 1 ;
  502. al1dp2 = 'EXTRAIRE' AL1GEOP2 'SCAL' 1 1 3 ;
  503. rn1gp2 = 'EXTRAIRE' RN1GEOP2 'SCAL' 1 1 1 ;
  504. rn1dp2 = 'EXTRAIRE' RN1GEOP2 'SCAL' 1 1 3 ;
  505. pn1gp2 = 'EXTRAIRE' PN1GEOP2 'SCAL' 1 1 1 ;
  506. pn1dp2 = 'EXTRAIRE' PN1GEOP2 'SCAL' 1 1 3 ;
  507. un1gp2 = 'EXTRAIRE' VN1GEOP2 'UN ' 1 1 1 ;
  508. un1dp2 = 'EXTRAIRE' VN1GEOP2 'UN ' 1 1 3 ;
  509. ut1gp2 = 'EXTRAIRE' VN1GEOP2 'UT ' 1 1 1 ;
  510. ut1dp2 = 'EXTRAIRE' VN1GEOP2 'UT ' 1 1 3 ;
  511. nxp2 = 'EXTRAIRE' TN1GEP2F 'NX ' 1 1 1 ;
  512. nyp2 = 'EXTRAIRE' TN1GEP2F 'NY ' 1 1 1 ;
  513. txp2 = 'EXTRAIRE' TN1GEP2F 'TX ' 1 1 1 ;
  514. typ2 = 'EXTRAIRE' TN1GEP2F 'TY ' 1 1 1 ;
  515. ux1gp2 = (un1gp2 * nxp2) '+' (ut1gp2 * txp2) ;
  516. uy1gp2 = (un1gp2 * nyp2) '+' (ut1gp2 * typ2) ;
  517.  
  518. * Selection of the left and the right state
  519.  
  520. MAICEN = 'DIFF' ('CHANGER' 'POI1' GEOP2) GEP2F ;
  521. 'SI' (('NBNO' MAICEN) 'NEG' 1) ;
  522. 'MESSAGE' 'Probleme en maicen' ;
  523. 'ERREUR' 5 ;
  524. 'FINSI' ;
  525.  
  526. PC1 = 'POIN' 1 MAICEN ;
  527. DXPC1 = ('COORDONNEE' 1 P2) '-' ('COORDONNEE' 1 PC1) ;
  528. DYPC1 = ('COORDONNEE' 2 P2) '-' ('COORDONNEE' 2 PC1) ;
  529. PSPC1 = (DXPC1 * nxp2) '+' (DYPC1 * nyp2) ;
  530. LOG1 = (PSPC1 > 0.0) ;
  531. 'SI' LOG1 ;
  532. PG = PC1 ;
  533. DXG = DXPC1 ;
  534. DYG = DYPC1 ;
  535. 'FINSI' ;
  536. 'SI' (('NON' LOG1)) ;
  537. 'MESSAGE' 'Probleme en facel' ;
  538. 'ERREUR' 5 ;
  539. 'FINSI' ;
  540.  
  541. al1gn = ('EXTRAIRE' AL1 'SCAL' PG) '+' (
  542. (
  543. (('EXTRAIRE' GRADAL1 'P1DX' PG) * DXG) '+'
  544. (('EXTRAIRE' GRADAL1 'P1DY' PG) * DYG)
  545. ) * ('EXTRAIRE' LIMAL1 'P1' PG)) ;
  546. rn1gn = ('EXTRAIRE' RN1 'SCAL' PG) '+' (
  547. (
  548. (('EXTRAIRE' GRADRN1 'P1DX' PG) * DXG) '+'
  549. (('EXTRAIRE' GRADRN1 'P1DY' PG) * DYG)
  550. ) * ('EXTRAIRE' LIMRN1 'P1' PG)) ;
  551. pn1gn = ('EXTRAIRE' PN1 'SCAL' PG) '+' (
  552. (
  553. (('EXTRAIRE' GRADPN1 'P1DX' PG) * DXG) '+'
  554. (('EXTRAIRE' GRADPN1 'P1DY' PG) * DYG)
  555. ) * ('EXTRAIRE' LIMPN1 'P1' PG)) ;
  556. ux1gn = ('EXTRAIRE' VN1 'UX ' PG) '+' (
  557. (
  558. (('EXTRAIRE' GRADUX1 'P1DX' PG) * DXG) '+'
  559. (('EXTRAIRE' GRADUX1 'P1DY' PG) * DYG)
  560. ) * ('EXTRAIRE' LIMUX1 'P1' PG)) ;
  561. uy1gn = ('EXTRAIRE' VN1 'UY ' PG) '+' (
  562. (
  563. (('EXTRAIRE' GRADUY1 'P2DX' PG) * DXG) '+'
  564. (('EXTRAIRE' GRADUY1 'P2DY' PG) * DYG)
  565. ) * ('EXTRAIRE' LIMUY1 'P2' PG)) ;
  566.  
  567. ERRO = 'PROG' ;
  568. ERRO = ERRO 'ET' ('PROG' ((al1gp2 '-' al1gn) 'ABS'));
  569. ERRO = ERRO 'ET' ('PROG' ((rn1gp2 '-' rn1gn) 'ABS'));
  570. ERRO = ERRO 'ET' ('PROG' ((pn1gp2 '-' pn1gn) 'ABS'));
  571. ERRO = ERRO 'ET' ('PROG' ((ux1gp2 '-' ux1gn) 'ABS'));
  572. ERRO = ERRO 'ET' ('PROG' ((uy1gp2 '-' uy1gn) 'ABS'));
  573. ERRO = 'MAXIMUM' ERRO 'ABS' ;
  574. 'SI' (ERRO > 1.0D-13) ;
  575. 'MESSAGE' 'Deuxieme ordre' ;
  576. 'MESSAGE' 'Les etats gauches au mur' ;
  577. 'MESSAGE' 'Erreur trop importante' ;
  578. 'MESSAGE' ('CHAINE' 'erro = ' ERRO) ;
  579. 'ERREUR' 5 ;
  580. 'FINSI' ;
  581.  
  582. ERRO = 'PROG' ;
  583. ERRO = ERRO 'ET' ('PROG' ((al1gp2 '-' al1dp2) 'ABS'));
  584. ERRO = ERRO 'ET' ('PROG' ((rn1gp2 '-' rn1dp2) 'ABS'));
  585. ERRO = ERRO 'ET' ('PROG' ((pn1gp2 '-' pn1dp2) 'ABS'));
  586. ERRO = ERRO 'ET' ('PROG' ((un1gp2 '+' un1dp2) 'ABS'));
  587. ERRO = ERRO 'ET' ('PROG' ((ut1gp2 '-' ut1dp2) 'ABS'));
  588. ERRO = 'MAXIMUM' ERRO 'ABS' ;
  589. 'SI' (ERRO > 1.0D-13) ;
  590. 'MESSAGE' 'Deuxieme ordre' ;
  591. 'MESSAGE' 'Les etats gauches au mur' ;
  592. 'MESSAGE' 'Erreur trop importante' ;
  593. 'MESSAGE' ('CHAINE' 'erro = ' ERRO) ;
  594. 'ERREUR' 5 ;
  595. 'FINSI' ;
  596.  
  597. * One species involved
  598. * For the sake of simplicity, we put Y = alpha = phi
  599. * and we test with respect to the previous case.
  600. *
  601.  
  602. PH1F RN1F VN1F PN1F =
  603. 'PRET' 'GFMP' NESP $DOMTOT
  604. AL1 GRADAL1 LIMAL1
  605. RN1 GRADRN1 LIMRN1
  606. VN1 GRADVN1 LIMVN1
  607. PN1 GRADPN1 LIMPN1
  608. ;
  609.  
  610. PH0F RN1F VN1F PN1F =
  611. 'PRET' 'GFMP' NESP $DOMTOT
  612. AL1 GRADAL1 (LIMAL1 * 0.0D0)
  613. RN1 GRADRN1 LIMRN1
  614. VN1 GRADVN1 LIMVN1
  615. PN1 GRADPN1 LIMPN1
  616. ;
  617.  
  618. NESP1 = 'MOTS' 'ESP2' ;
  619.  
  620. PHFM RN1F VN1F PN1F YNF ALF =
  621. 'PRET' 'GFMP' NESP1 $DOMTOT
  622. AL1 GRADAL1 (LIMAL1 * 0.0D0)
  623. RN1 GRADRN1 LIMRN1
  624. VN1 GRADVN1 LIMVN1
  625. PN1 GRADPN1 LIMPN1
  626. ('NOMC' AL1 'ESP2') (0.0 * GRADAL1) LIMAL1
  627. ('NOMC' AL1 'ESP2') GRADAL1 LIMAL1
  628. ;
  629.  
  630. PHFM = 'NOMC' 'ESP2' PHFM ;
  631. PH0F = 'NOMC' 'ESP2' PH0F ;
  632. PH1F = 'NOMC' 'ESP2' PH1F ;
  633. ERRO = 'MAXIMUM' (PHFM '-' YNF) 'ABS' ;
  634. ERRO = ERRO '+' (
  635. 'MAXIMUM' (PH0F '-' YNF) 'ABS'
  636. ) ;
  637. ERRO = ERRO '+' (
  638. 'MAXIMUM' (ALF '-' PH1F) 'ABS'
  639. ) ;
  640.  
  641. PHFM RN1F VN1F PN1F YNF1 ALF1 =
  642. 'PRET' 'GFMP' NESP1 $DOMTOT
  643. AL1 GRADAL1 (LIMAL1 * 0.0D0)
  644. RN1 GRADRN1 LIMRN1
  645. VN1 GRADVN1 LIMVN1
  646. PN1 GRADPN1 LIMPN1
  647. ('NOMC' AL1 'ESP2') (1.0 * GRADAL1) LIMAL1
  648. ('NOMC' AL1 'ESP2') (0.0 * GRADAL1) LIMAL1
  649. ;
  650.  
  651. ERRO = ERRO '+' (
  652. 'MAXIMUM' (ALF1 '-' YNF) 'ABS'
  653. ) ;
  654. ERRO = ERRO '+' (
  655. 'MAXIMUM' (ALF '-' YNF1) 'ABS'
  656. ) ;
  657. 'SI' (ERRO > 1.0D-13) ;
  658. 'MESSAGE' 'Multi-espece' ;
  659. 'MESSAGE' 'Erreur trop importante' ;
  660. 'MESSAGE' ('CHAINE' 'erro = ' ERRO) ;
  661. 'ERREUR' 5 ;
  662. 'FINSI' ;
  663.  
  664. 'FIN' ;
  665.  
  666.  
  667.  
  668.  
  669.  
  670.  

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