Télécharger konv_impl.dgibi

Retour à la liste

Numérotation des lignes :

  1. * fichier : konv_impl.dgibi
  2. ***********************************************************
  3. ***********************************************************
  4. **** APPROCHE VF "Cell-Centred Formulation" pour la ****
  5. **** solution des ****
  6. **** Equations d'Euler pour un gaz parfait ****
  7. **** OPERATEURS PRIM, PRET, KONV ****
  8. **** Implicit: calcul du jacobien du residu ****
  9. **** ****
  10. **** Cas gaz monoespece, "calorically perfect" ****
  11. **** ****
  12. **** Methodes: VLH ****
  13. **** ****
  14. **** A. BECCANTINI DRN/DMT/SEMT/LTMF AOUT 2000 ****
  15. ***********************************************************
  16. ***********************************************************
  17.  
  18. 'OPTION' 'DIME' 2 ;
  19. 'OPTION' 'ELEM' QUA4 ;
  20. 'OPTION' 'ECHO' 0 ;
  21. 'OPTION' 'TRAC' 'X' ;
  22.  
  23. *
  24. *** GRAPH
  25. *
  26.  
  27. GRAPH = FAUX ;
  28. * GRAPH = VRAI ;
  29.  
  30. ERRTOL = 1.0D-3 ;
  31.  
  32. ***************************
  33. ***** DOMAINE SPATIAL ****
  34. ***************************
  35.  
  36.  
  37. A0 = 0.0D0 0.0D0;
  38. A1 = 1.0D0 0.0D0;
  39. A2 = 2.0D0 0.0D0;
  40. A3 = 3.0D0 0.0D0;
  41.  
  42. A0A1 = A0 'DROIT' 1 A1;
  43. A1A2 = A1 'DROIT' 1 A2;
  44. A2A3 = A2 'DROIT' 1 A3;
  45.  
  46.  
  47. DOM1 = 'TRANSLATION' A0A1 1 (0.0 1.0) ;
  48. DOM2 = DOM1 'PLUS' (0.0 1.0) ;
  49. DOM3 = DOM2 'PLUS' (0.0 1.0) ;
  50. DOM4 = 'TRANSLATION' A1A2 1 (0.0 1.0) ;
  51. DOM5 = DOM4 'PLUS' (0.0 1.0) ;
  52. DOM6 = DOM5 'PLUS' (0.0 1.0) ;
  53. DOM7 = 'TRANSLATION' A2A3 1 (0.0 1.0) ;
  54. DOM8 = DOM7 'PLUS' (0.0 1.0) ;
  55. DOM9 = DOM8 'PLUS' (0.0 1.0) ;
  56.  
  57.  
  58. DOMTOT = DOM1 'ET' DOM2 'ET' DOM3 'ET' DOM4 'ET' DOM5 'ET'
  59. DOM6 'ET' DOM7 'ET' DOM8 'ET' DOM9 'ELIMINATION' 0.0001 ;
  60.  
  61. $DOMTOT = 'MODELISER' DOMTOT 'EULER';
  62.  
  63. $DOM6 = 'MODELISER' DOM6 'EULER';
  64. $DOM7 = 'MODELISER' DOM7 'EULER';
  65. $DOM9 = 'MODELISER' DOM9 'EULER';
  66.  
  67. TDOMTOT = 'DOMA' $DOMTOT 'VF';
  68.  
  69. TDOM6 = 'DOMA' $DOM6 'VF';
  70. TDOM7 = 'DOMA' $DOM7 'VF';
  71. TDOM9 = 'DOMA' $DOM9 'VF';
  72.  
  73. MDOM6 = TDOM6 . 'QUAF' ;
  74. MDOM7 = TDOM7 . 'QUAF' ;
  75. MDOM9 = TDOM9 . 'QUAF' ;
  76.  
  77. **** old stuff $DOMTOT = 'DOMA' DOMTOT ;
  78.  
  79. MDOMTOT = TDOMTOT . 'QUAF' ;
  80.  
  81. 'ELIMINATION' (MDOMTOT ET MDOM6) 0.0001 ;
  82. 'ELIMINATION' (MDOMTOT ET MDOM7) 0.0001 ;
  83. 'ELIMINATION' (MDOMTOT ET MDOM9) 0.0001 ;
  84.  
  85. ***************************************************
  86. ***** Densité, pression, vitesse, gamma ***********
  87. ***************************************************
  88.  
  89. RN0 = 'BRUI' 'BLAN' 'UNIF' 1.11 0.5 ('DOMA' $DOMTOT 'CENTRE') ;
  90. PN0 = 'BRUI' 'BLAN' 'UNIF' 1234.1 800 ('DOMA' $DOMTOT 'CENTRE') ;
  91. GAMMAN = 'MANUEL' 'CHPO' ('DOMA' $DOMTOT 'CENTRE') 1 'SCAL' 1.4
  92. 'NATU' 'DISCRET' ;
  93. CSONN = (GAMMAN '*' PN0) '/' RN0 ;
  94. CSONN = 'KOPS' CSONN '**' 0.5 ;
  95. UXN0 = 0.2 * CSONN ;
  96. UYN0 = 0.3 * CSONN ;
  97.  
  98. GN0 = ('NOMC' (RN0 '*' UXN0) 'UX' 'NATU' 'DISCRET') 'ET'
  99. ('NOMC' (RN0 '*' UYN0) 'UY' 'NATU' 'DISCRET') ;
  100.  
  101. ECIN = 0.5D0 '*' RN0 '*' ((UXN0 '*' UXN0) '+' (UYN0 '*' UYN0)) ;
  102. RETN0 = 'NOMC' 'SCAL' ((PN0 '/' (GAMMAN '-' 1.0)) '+' ECIN)
  103. 'NATU' 'DISCRET' ;
  104.  
  105. VIT PRES = PRIM 'PERFMONO' RN0 GN0 RETN0 GAMMAN ;
  106.  
  107. ERR1 = 'MAXIMUM' (PRES '-' PN0) 'ABS' ;
  108. ERR2 = 'MAXIMUM' (GN0 '-' (RN0 '*' VIT ('MOTS' 'SCAL' 'SCAL')
  109. ('MOTS' 'UX' 'UY') ('MOTS' 'UX' 'UY'))) 'ABS' ;
  110.  
  111. 'SI' (('MAXIMUM' ('PROG' ERR1 ERR2 ) 'ABS' ) > 1.0D-6) ;
  112. 'MESSAGE' 'Problem 0' ;
  113. 'ERREUR' 5 ;
  114. 'FINSI' ;
  115.  
  116.  
  117. 'SI' GRAPH;
  118. 'TRACER' (('DOMA' $DOMTOT 'MAILLAGE') 'ET'
  119. ('DOMA' $DOMTOT 'MAILLAGE')) 'TITRE' 'Domaine et centre' ;
  120. 'FINSI' ;
  121.  
  122. *
  123. **** Les variables conservative
  124. *
  125. * RN0 (densité)
  126. * GN0 (quantité de mouvement)
  127. * RETN0 (énergie totale par unité de volume)
  128. *
  129. * sont definiés
  130. *
  131.  
  132. ****************************************************
  133. ****************************************************
  134. ******* Calcul du jacobien et du residu **********
  135. ****************************************************
  136. ****************************************************
  137. *
  138. * JACO est le jacobien
  139. *
  140. * DEBRN0 le residu concernant la densité
  141. * DEBGNX0 le residu concernant la quantité de mouvement (axe x)
  142. * DEBGNY0 le residu concernant la quantité de mouvement (axe y)
  143. * DEBRETN0 le residu concernant l'enrgie totale par unité de volume
  144. *
  145.  
  146. * Noms des variables
  147.  
  148. NOMDEN = 'RN ' ;
  149. NOMMOX = 'RUXN' ;
  150. NOMMOY = 'RUYN' ;
  151. NOMRET = 'RETN' ;
  152.  
  153. * Metode
  154.  
  155. METO = 'VLH' ;
  156.  
  157.  
  158. LISTINCO = 'MOTS' NOMDEN NOMMOX NOMMOY NOMRET ;
  159.  
  160. VITESSE PRES = 'PRIM' 'PERFMONO' RN0 GN0 RETN0 GAMMAN ;
  161.  
  162. ROF VITF PF GAMF = 'PRET' 'PERFMONO' 1 1
  163. $DOMTOT RN0 VITESSE PRES GAMMAN ;
  164.  
  165. MAIL2 = 'DIFF' ('DOMA' $DOMTOT 'CENTRE') ('DOMA' $DOMTOT 'CENTRE') ;
  166.  
  167. CHPRES0 DT = 'KONV' 'VF' 'PERFMONO' 'RESI' METO
  168. $DOMTOT LISTINCO ROF VITF PF GAMF MAIL2 ;
  169.  
  170. JACO = 'KONV' 'VF' 'PERFMONO' 'JACOCONS'
  171. $DOMTOT LISTINCO MAIL2 'VLH' RN0 VITESSE PRES GAMMAN
  172. ;
  173.  
  174. DEBRN0 = 'EXCO' NOMDEN CHPRES0 ;
  175. DEBGNX0 = 'EXCO' NOMMOX CHPRES0 ;
  176. DEBGNY0 = 'EXCO' NOMMOY CHPRES0 ;
  177. DEBRETN0 = 'EXCO' NOMRET CHPRES0 ;
  178.  
  179. *****************************************************
  180. *****************************************************
  181. ******** PROCEDURES *********************************
  182. *****************************************************
  183. *****************************************************
  184.  
  185. *
  186. * Derivé partielle du residu en un point par rapport
  187. * aux variable en un autre point
  188. *
  189.  
  190. 'DEBPROC' JACOVA JACO*'MATRIK' $DOMA*'MMODEL' LISTINCO*'LISTMOTS'
  191. PPRIM*'POINT' PDUAL*'POINT' MOTPRI*'MOT' MOTDUA*'MOT'
  192. MAIL1*'MAILLAGE';
  193.  
  194. * PPRIM = point ou est localisé la variable primale
  195. * PDUAL = point ou est localisé la variable duale
  196. * MOTPRI = nom de la composante concernante la variable primale
  197. * MOTDUA = nom de la composante concernante la variable duale
  198.  
  199. ELT1 = 'MANUEL' 'POI1' PPRIM ;
  200. NDIM = 'DIME' LISTINCO ;
  201. CHPUN = 'MANUEL' 'CHPO' ELT1 1 MOTPRI 1.0 'NATURE' 'DISCRET' ;
  202. 'REPETER' BL1 NDIM ;
  203. MOTCEL = 'EXTRAIRE' LISTINCO &BL1 ;
  204. CHPUN = CHPUN 'ET' ('MANUEL' 'CHPO' ('DOMA' $DOMA 'CENTRE')
  205. 1 MOTCEL 0.0 'NATURE' 'DISCRET') ;
  206. 'FIN' BL1 ;
  207. D_DMOT = 'KOPS' JACO 'MULT' CHPUN ;
  208. SCAL = 'EXTRAIRE' D_DMOT PDUAL MOTDUA ;
  209.  
  210. 'FINPROC' SCAL ;
  211.  
  212.  
  213.  
  214. 'DEBPROC' JACNUM $MODE*'MMODEL' NOMMET*'MOT' RN*'CHPOINT' GN*'CHPOINT'
  215. RETN*'CHPOINT' GAMN*'CHPOINT'
  216. LISTINCO*'LISTMOTS' PPRIM*'POINT' PDUAL*'POINT'
  217. MOTPRI*'MOT' MOTDUA*'MOT' EPSILON*'FLOTTANT' MAIL1*'MAILLAGE';
  218.  
  219. * PPRIM = point ou est localisé la variable primale
  220. * PDUAL = point ou est localisé la variable duale
  221. * MOTPRI = nom de la composante concernante la variable primale
  222. * MOTDUA = nom de la composante concernante la variable duale
  223.  
  224. * Le valeur dans l'état non-perturbé en PDUAL ;
  225.  
  226. RNCEL = 'COPIER' RN ;
  227. GNCEL = 'COPIER' GN ;
  228. RETNCEL = 'COPIER' RETN ;
  229.  
  230. VITESSE PRES = 'PRIM' 'PERFMONO' RNCEL GNCEL RETNCEL GAMN ;
  231.  
  232. ROF VITF PF GAMF = 'PRET' 'PERFMONO' 1 1
  233. $MODE RNCEL VITESSE PRES GAMN ;
  234.  
  235. CHPRES0 DT = 'KONV' 'VF' 'PERFMONO' 'RESI' NOMMET
  236. $MODE ROF VITF PF GAMF LISTINCO MAIL1 ;
  237.  
  238. VAL0 = 'EXTRAIRE' CHPRES0 PDUAL MOTDUA ;
  239.  
  240. * EPSILON = perturbation
  241.  
  242. * Adimensionalisation
  243.  
  244. dens0 = 'EXTRAIRE' RN PPRIM 'SCAL' ;
  245.  
  246. VN PN = 'PRIM' 'PERFMONO' RN GN RETN GAMN ;
  247. CN2 = GAMN '*' (PN '/' RN) ;
  248. cson0 = ('EXTRAIRE' CN2 PPRIM 'SCAL') '**' 0.5 ;
  249.  
  250. ret0 = ('EXTRAIRE' RETN PPRIM 'SCAL') '**' 0.5 ;
  251.  
  252. * On etabli la variable à perturber
  253.  
  254. NDIM = 'DIME' LISTINCO ;
  255. 'REPETER' BL1 NDIM ;
  256. MOTCEL = 'EXTRAIRE' LISTINCO &BL1 ;
  257. 'SI' ('EGA' MOTCEL MOTPRI) ;
  258. ICEL = &BL1 ;
  259. 'QUITTER' BL1 ;
  260. 'FINSI' ;
  261. 'FIN' BL1 ;
  262.  
  263. 'SI' (ICEL > NDIM) ;
  264. 'MESSAGE' 'Procedure JACNUM' ;
  265. 'MESSAGE' 'MOTPRI = ??? ';
  266. 'ERREUR' 21 ;
  267. 'FINSI' ;
  268.  
  269. ELT1 = 'MANUEL' 'POI1' PPRIM ;
  270.  
  271. * ICEL = 1 -> On perturbe la densité
  272.  
  273. 'SI' ('EGA' ICEL 1) ;
  274. DELTATOT = (EPSILON * dens0) ;
  275. RNCEL = ('MANUEL' 'CHPO' ELT1 1 'SCAL' DELTATOT
  276. 'NATURE' 'DISCRET') 'ET' RN ;
  277. GNCEL = 'COPIER' GN ;
  278. RETNCEL = 'COPIER' RETN ;
  279. 'FINSI' ;
  280.  
  281. * ICEL = 2 -> On perturbe la q.d.m. long l'ax x
  282.  
  283. 'SI' ('EGA' ICEL 2) ;
  284. DELTATOT = (EPSILON * dens0 * cson0) ;
  285. GNCEL = ('MANUEL' 'CHPO' ELT1 1 'UX' DELTATOT
  286. 'NATURE' 'DISCRET') 'ET' GN ;
  287. RNCEL = 'COPIER' RN ;
  288. RETNCEL = 'COPIER' RETN ;
  289. 'FINSI' ;
  290.  
  291. * ICEL = 3 -> On perturbe la q.d.m. long l'ax y
  292.  
  293. 'SI' ('EGA' ICEL 3) ;
  294. DELTATOT = (EPSILON * dens0 * cson0) ;
  295. GNCEL = ('MANUEL' 'CHPO' ELT1 1 'UY' DELTATOT
  296. 'NATURE' 'DISCRET') 'ET' GN ;
  297. RNCEL = 'COPIER' RN ;
  298. RETNCEL = 'COPIER' RETN ;
  299. 'FINSI' ;
  300.  
  301. * ICEL = 4 -> On perturbe l'énergie totale
  302.  
  303. 'SI' ('EGA' ICEL 4) ;
  304. DELTATOT = (EPSILON * ret0) ;
  305. RETNCEL = ('MANUEL' 'CHPO' ELT1 1 'SCAL' DELTATOT
  306. 'NATURE' 'DISCRET') 'ET' RETN ;
  307. RNCEL = 'COPIER' RN ;
  308. GNCEL = 'COPIER' GN ;
  309. 'FINSI' ;
  310.  
  311. VITESSE PRES = 'PRIM' 'PERFMONO' RNCEL GNCEL RETNCEL GAMN ;
  312.  
  313. ROF VITF PF GAMF = 'PRET' 'PERFMONO' 1 1
  314. $MODE RNCEL VITESSE PRES GAMN ;
  315.  
  316. CHPRES1 DT = 'KONV' 'VF' 'PERFMONO' 'RESI' NOMMET
  317. $MODE ROF VITF PF GAMF LISTINCO MAIL1 ;
  318.  
  319. VAL1 = 'EXTRAIRE' CHPRES1 PDUAL MOTDUA ;
  320.  
  321. 'FINPROC' ((VAL1 '-' VAL0) '/' DELTATOT) ;
  322.  
  323. *****************************************************
  324. *****************************************************
  325. ******** FIN PROCEDURES *****************************
  326. *****************************************************
  327. *****************************************************
  328. *****************************************************
  329.  
  330.  
  331. *****************************************************
  332. ******* TEST1 ***************************************
  333. *****************************************************
  334. *
  335. * On compare le jacobien et la variation du residu
  336. * en $DOM9 . 'CENTRE' par rapport à une variation
  337. * infinitésimal en $DOM9 . 'CENTRE'
  338. *
  339.  
  340. PCEN9 = 'POIN' 1 ('DOMA' $DOM9 'CENTRE') ;
  341.  
  342. * Les grandeurs pour adimesionner les erreurs
  343.  
  344. ro0 = 'EXTRAIRE' RN0 PCEN9 'SCAL' ;
  345.  
  346. VN0 PN0 = 'PRIM' 'PERFMONO' RN0 GN0 RETN0 GAMMAN ;
  347. CN20 = GAMMAN '*' (PN0 '/' RN0) ;
  348. cson0 = ('EXTRAIRE' CN20 PCEN9 'SCAL') '**' 0.5 ;
  349.  
  350. ret0 = ('EXTRAIRE' RETN0 PCEN9 'SCAL') '**' 0.5 ;
  351.  
  352. *
  353. * Le jacobien exact.
  354. * DRR = d(RES_ro)/dro (variable primale en PCEN9, variable duale en PCEN9) ;
  355. * DGXR = d(RES_gx)/dro (variable primale en PCEN9, variable duale en PCEN9) ;
  356. * ...
  357.  
  358. DRR = JACOVA JACO $DOMTOT LISTINCO PCEN9 PCEN9 NOMDEN NOMDEN MAIL2 ;
  359. DGXR = JACOVA JACO $DOMTOT LISTINCO PCEN9 PCEN9 NOMDEN NOMMOX MAIL2 ;
  360. DGYR = JACOVA JACO $DOMTOT LISTINCO PCEN9 PCEN9 NOMDEN NOMMOY MAIL2 ;
  361. DRETR = JACOVA JACO $DOMTOT LISTINCO PCEN9 PCEN9 NOMDEN NOMRET MAIL2 ;
  362.  
  363. DRGX = JACOVA JACO $DOMTOT LISTINCO PCEN9 PCEN9 NOMMOX NOMDEN MAIL2 ;
  364. DGXGX = JACOVA JACO $DOMTOT LISTINCO PCEN9 PCEN9 NOMMOX NOMMOX MAIL2 ;
  365. DGYGX = JACOVA JACO $DOMTOT LISTINCO PCEN9 PCEN9 NOMMOX NOMMOY MAIL2 ;
  366. DRETGX = JACOVA JACO $DOMTOT LISTINCO PCEN9 PCEN9 NOMMOX NOMRET MAIL2 ;
  367.  
  368. DRGY = JACOVA JACO $DOMTOT LISTINCO PCEN9 PCEN9 NOMMOY NOMDEN MAIL2 ;
  369. DGXGY = JACOVA JACO $DOMTOT LISTINCO PCEN9 PCEN9 NOMMOY NOMMOX MAIL2 ;
  370. DGYGY = JACOVA JACO $DOMTOT LISTINCO PCEN9 PCEN9 NOMMOY NOMMOY MAIL2 ;
  371. DRETGY = JACOVA JACO $DOMTOT LISTINCO PCEN9 PCEN9 NOMMOY NOMRET MAIL2 ;
  372.  
  373. DRRET = JACOVA JACO $DOMTOT LISTINCO PCEN9 PCEN9 NOMRET NOMDEN
  374. MAIL2 ;
  375. DGXRET = JACOVA JACO $DOMTOT LISTINCO PCEN9 PCEN9 NOMRET NOMMOX
  376. MAIL2 ;
  377. DGYRET = JACOVA JACO $DOMTOT LISTINCO PCEN9 PCEN9 NOMRET NOMMOY
  378. MAIL2 ;
  379. DRETRET = JACOVA JACO $DOMTOT LISTINCO PCEN9 PCEN9 NOMRET NOMRET
  380. MAIL2 ;
  381.  
  382. * Le jacobien numerique
  383.  
  384.  
  385. DELTA = 1.0D-5 ;
  386.  
  387. DRRN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN9 PCEN9
  388. NOMDEN NOMDEN DELTA MAIL2 ;
  389. DGXRN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN9 PCEN9
  390. NOMDEN NOMMOX DELTA MAIL2 ;
  391. DGYRN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN9 PCEN9
  392. NOMDEN NOMMOY DELTA MAIL2 ;
  393. DRETRN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN9 PCEN9
  394. NOMDEN NOMRET DELTA MAIL2 ;
  395.  
  396. DRGXN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN9 PCEN9
  397. NOMMOX NOMDEN DELTA MAIL2 ;
  398. DGXGXN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN9 PCEN9
  399. NOMMOX NOMMOX DELTA MAIL2 ;
  400. DGYGXN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN9 PCEN9
  401. NOMMOX NOMMOY DELTA MAIL2 ;
  402. DRETGXN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN9 PCEN9
  403. NOMMOX NOMRET DELTA MAIL2 ;
  404.  
  405. DRGYN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN9 PCEN9
  406. NOMMOY NOMDEN DELTA MAIL2 ;
  407. DGXGYN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN9 PCEN9
  408. NOMMOY NOMMOX DELTA MAIL2 ;
  409. DGYGYN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN9 PCEN9
  410. NOMMOY NOMMOY DELTA MAIL2 ;
  411. DRETGYN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN9 PCEN9
  412. NOMMOY NOMRET DELTA MAIL2 ;
  413.  
  414. DRRETN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN9 PCEN9
  415. NOMRET NOMDEN DELTA MAIL2 ;
  416. DGXRETN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN9 PCEN9
  417. NOMRET NOMMOX DELTA MAIL2 ;
  418. DGYRETN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN9 PCEN9
  419. NOMRET NOMMOY DELTA MAIL2 ;
  420. DRETRETN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN9
  421. PCEN9
  422. NOMRET NOMRET DELTA MAIL2 ;
  423.  
  424. * Test des comparaisons jacobien exact-jacobien numerique
  425.  
  426. ERR1 = ('ABS' (DRRN '-' DRR)) '*' (ro0 '/' (ro0 '*' cson0)) ;
  427. 'SI' (ERR1 > ERRTOL) ;
  428. 'MESSAGE' 'Problem 1';
  429. 'ERREUR' 5 ;
  430. 'FINSI' ;
  431.  
  432. ERR1 = ('ABS' (DGXRN '-' DGXR)) '*'
  433. (ro0 '/' (ro0 '*' cson0 '*' cson0)) ;
  434. 'SI' (ERR1 > ERRTOL) ;
  435. 'MESSAGE' 'Problem 2';
  436. 'ERREUR' 5 ;
  437. 'FINSI' ;
  438.  
  439. ERR1 = ('ABS' (DGYRN '-' DGYR)) '*'
  440. (ro0 '/' (ro0 '*' cson0 '*' cson0)) ;
  441. 'SI' (ERR1 > ERRTOL) ;
  442. 'MESSAGE' 'Problem 3';
  443. 'ERREUR' 5 ;
  444. 'FINSI' ;
  445.  
  446. ERR1 = ('ABS' (DRETRN '-' DRETR)) '*'
  447. (ro0 '/' (ret0 '*' cson0)) ;
  448. 'SI' (ERR1 > ERRTOL) ;
  449. 'MESSAGE' 'Problem 4';
  450. 'ERREUR' 5 ;
  451. 'FINSI' ;
  452.  
  453.  
  454. ERR1 = ('ABS' (DRGXN '-' DRGX)) ;
  455. 'SI' (ERR1 > ERRTOL) ;
  456. 'MESSAGE' 'Problem 5';
  457. 'ERREUR' 5 ;
  458. 'FINSI' ;
  459.  
  460. ERR1 = ('ABS' (DGXGXN '-' DGXGX)) '/' cson0 ;
  461. 'SI' (ERR1 > ERRTOL) ;
  462. 'MESSAGE' 'Problem 6';
  463. 'ERREUR' 5 ;
  464. 'FINSI' ;
  465.  
  466. ERR1 = ('ABS' (DGYGXN '-' DGYGX)) '/' cson0 ;
  467. 'SI' (ERR1 > ERRTOL) ;
  468. 'MESSAGE' 'Problem 7';
  469. 'ERREUR' 5 ;
  470. 'FINSI' ;
  471.  
  472.  
  473. ERR1 = ('ABS' (DRETGXN '-' DRETGX)) '*'
  474. (ro0 / ret0) ;
  475. 'SI' (ERR1 > ERRTOL) ;
  476. 'MESSAGE' 'Problem 8';
  477. 'ERREUR' 5 ;
  478. 'FINSI' ;
  479.  
  480. ERR1 = ('ABS' (DRGYN '-' DRGY)) ;
  481. 'SI' (ERR1 > ERRTOL) ;
  482. 'MESSAGE' 'Problem 9';
  483. 'ERREUR' 5 ;
  484. 'FINSI' ;
  485.  
  486. ERR1 = ('ABS' (DGXGYN '-' DGXGY)) '/' cson0 ;
  487. 'SI' (ERR1 > ERRTOL) ;
  488. 'MESSAGE' 'Problem 10';
  489. 'ERREUR' 5 ;
  490. 'FINSI' ;
  491.  
  492. ERR1 = ('ABS' (DGYGYN '-' DGYGY)) '/' cson0 ;
  493. 'SI' (ERR1 > ERRTOL) ;
  494. 'MESSAGE' 'Problem 11';
  495. 'ERREUR' 5 ;
  496. 'FINSI' ;
  497.  
  498. ERR1 = ('ABS' (DRETGYN '-' DRETGY)) '*'
  499. (ro0 / ret0) ;
  500. 'SI' (ERR1 > ERRTOL) ;
  501. 'MESSAGE' 'Problem 12';
  502. 'ERREUR' 5 ;
  503. 'FINSI' ;
  504.  
  505. ERR1 = ('ABS' (DRRETN '-' DRRET)) '*' (ret0 '/' (ro0 '*' cson0)) ;
  506. 'SI' (ERR1 > ERRTOL) ;
  507. 'MESSAGE' 'Problem 13';
  508. 'ERREUR' 5 ;
  509. 'FINSI' ;
  510.  
  511. ERR1 = ('ABS' (DGXRETN '-' DGXRET)) '*'
  512. (ret0 '/' (ro0 '*' cson0 * cson0)) ;
  513. 'SI' (ERR1 > ERRTOL) ;
  514. 'MESSAGE' 'Problem 14';
  515. 'ERREUR' 5 ;
  516. 'FINSI' ;
  517.  
  518. ERR1 = ('ABS' (DGYRETN '-' DGYRET)) '*'
  519. (ret0 '/' (ro0 '*' cson0 * cson0)) ;
  520. 'SI' (ERR1 > ERRTOL) ;
  521. 'MESSAGE' 'Problem 15';
  522. 'ERREUR' 5 ;
  523. 'FINSI' ;
  524.  
  525.  
  526. ERR1 = ('ABS' (DRETRETN '-' DRETRET)) '/' cson0 ;
  527. 'SI' (ERR1 > ERRTOL) ;
  528. 'MESSAGE' 'Problem 16';
  529. 'ERREUR' 5 ;
  530. 'FINSI' ;
  531.  
  532. *****************************************************
  533. *****************************************************
  534. ******* TEST2 ***************************************
  535. *****************************************************
  536. *****************************************************
  537. *
  538. * On compare le jacobien et la variation du residu
  539. * en $DOM9 . 'CENTRE' par rapport à une variation
  540. * infinitésimal en $DOM6 . 'CENTRE'
  541. *
  542.  
  543. PCEN6 = ('DOMA' $DOM6 'CENTRE') 'POIN' 1 ;
  544.  
  545. ro0 = 'EXTRAIRE' RN0 PCEN6 'SCAL' ;
  546. cson0 = ('EXTRAIRE' CN20 PCEN6 'SCAL') '**' 0.5 ;
  547. ret0 = 'EXTRAIRE' RETN0 PCEN6 'SCAL' ;
  548.  
  549. *
  550. * Le jacobien exact.
  551. *
  552.  
  553. DRR = JACOVA JACO $DOMTOT LISTINCO PCEN6 PCEN9 NOMDEN NOMDEN MAIL2 ;
  554. DGXR = JACOVA JACO $DOMTOT LISTINCO PCEN6 PCEN9 NOMDEN NOMMOX MAIL2 ;
  555. DGYR = JACOVA JACO $DOMTOT LISTINCO PCEN6 PCEN9 NOMDEN NOMMOY MAIL2 ;
  556. DRETR = JACOVA JACO $DOMTOT LISTINCO PCEN6 PCEN9 NOMDEN NOMRET MAIL2 ;
  557.  
  558. DRGX = JACOVA JACO $DOMTOT LISTINCO PCEN6 PCEN9 NOMMOX NOMDEN MAIL2 ;
  559. DGXGX = JACOVA JACO $DOMTOT LISTINCO PCEN6 PCEN9 NOMMOX NOMMOX MAIL2 ;
  560. DGYGX = JACOVA JACO $DOMTOT LISTINCO PCEN6 PCEN9 NOMMOX NOMMOY MAIL2 ;
  561. DRETGX = JACOVA JACO $DOMTOT LISTINCO PCEN6 PCEN9 NOMMOX NOMRET MAIL2 ;
  562.  
  563. DRGY = JACOVA JACO $DOMTOT LISTINCO PCEN6 PCEN9 NOMMOY NOMDEN MAIL2 ;
  564. DGXGY = JACOVA JACO $DOMTOT LISTINCO PCEN6 PCEN9 NOMMOY NOMMOX MAIL2 ;
  565. DGYGY = JACOVA JACO $DOMTOT LISTINCO PCEN6 PCEN9 NOMMOY NOMMOY MAIL2 ;
  566. DRETGY = JACOVA JACO $DOMTOT LISTINCO PCEN6 PCEN9 NOMMOY NOMRET MAIL2 ;
  567.  
  568. DRRET = JACOVA JACO $DOMTOT LISTINCO PCEN6 PCEN9 NOMRET NOMDEN MAIL2;
  569. DGXRET = JACOVA JACO $DOMTOT LISTINCO PCEN6 PCEN9 NOMRET NOMMOX MAIL2;
  570. DGYRET = JACOVA JACO $DOMTOT LISTINCO PCEN6 PCEN9 NOMRET NOMMOY MAIL2;
  571. DRETRET = JACOVA JACO $DOMTOT LISTINCO PCEN6 PCEN9 NOMRET NOMRET MAIL2;
  572.  
  573. * Le jacobien numerique
  574.  
  575.  
  576. DELTA = 1.0D-5 ;
  577.  
  578. DRRN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN6 PCEN9
  579. NOMDEN NOMDEN DELTA MAIL2 ;
  580. DGXRN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN6 PCEN9
  581. NOMDEN NOMMOX DELTA MAIL2 ;
  582. DGYRN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN6 PCEN9
  583. NOMDEN NOMMOY DELTA MAIL2 ;
  584. DRETRN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN6 PCEN9
  585. NOMDEN NOMRET DELTA MAIL2 ;
  586.  
  587. DRGXN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN6 PCEN9
  588. NOMMOX NOMDEN DELTA MAIL2 ;
  589. DGXGXN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN6 PCEN9
  590. NOMMOX NOMMOX DELTA MAIL2 ;
  591. DGYGXN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN6 PCEN9
  592. NOMMOX NOMMOY DELTA MAIL2 ;
  593. DRETGXN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN6 PCEN9
  594. NOMMOX NOMRET DELTA MAIL2 ;
  595.  
  596. DRGYN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN6 PCEN9
  597. NOMMOY NOMDEN DELTA MAIL2 ;
  598. DGXGYN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN6 PCEN9
  599. NOMMOY NOMMOX DELTA MAIL2 ;
  600. DGYGYN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN6 PCEN9
  601. NOMMOY NOMMOY DELTA MAIL2 ;
  602. DRETGYN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN6 PCEN9
  603. NOMMOY NOMRET DELTA MAIL2 ;
  604.  
  605. DRRETN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN6 PCEN9
  606. NOMRET NOMDEN DELTA MAIL2 ;
  607. DGXRETN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN6 PCEN9
  608. NOMRET NOMMOX DELTA MAIL2 ;
  609. DGYRETN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN6 PCEN9
  610. NOMRET NOMMOY DELTA MAIL2 ;
  611. DRETRETN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN6
  612. PCEN9
  613. NOMRET NOMRET DELTA MAIL2 ;
  614.  
  615. * Test des comparaisons jacobien exact-jacobien numerique
  616.  
  617. ERR1 = ('ABS' (DRRN '-' DRR)) '*' (ro0 '/' (ro0 '*' cson0)) ;
  618. 'SI' (ERR1 > ERRTOL) ;
  619. 'MESSAGE' 'Problem 1';
  620. 'ERREUR' 5 ;
  621. 'FINSI' ;
  622.  
  623. ERR1 = ('ABS' (DGXRN '-' DGXR)) '*'
  624. (ro0 '/' (ro0 '*' cson0 '*' cson0)) ;
  625. 'SI' (ERR1 > ERRTOL) ;
  626. 'MESSAGE' 'Problem 2';
  627. 'ERREUR' 5 ;
  628. 'FINSI' ;
  629.  
  630. ERR1 = ('ABS' (DGYRN '-' DGYR)) '*'
  631. (ro0 '/' (ro0 '*' cson0 '*' cson0)) ;
  632. 'SI' (ERR1 > ERRTOL) ;
  633. 'MESSAGE' 'Problem 3';
  634. 'ERREUR' 5 ;
  635. 'FINSI' ;
  636.  
  637. ERR1 = ('ABS' (DRETRN '-' DRETR)) '*'
  638. (ro0 '/' (ret0 '*' cson0)) ;
  639. 'SI' (ERR1 > ERRTOL) ;
  640. 'MESSAGE' 'Problem 4';
  641. 'ERREUR' 5 ;
  642. 'FINSI' ;
  643.  
  644.  
  645. ERR1 = ('ABS' (DRGXN '-' DRGX)) ;
  646. 'SI' (ERR1 > ERRTOL) ;
  647. 'MESSAGE' 'Problem 5';
  648. 'ERREUR' 5 ;
  649. 'FINSI' ;
  650.  
  651. ERR1 = ('ABS' (DGXGXN '-' DGXGX)) '/' cson0 ;
  652. 'SI' (ERR1 > ERRTOL) ;
  653. 'MESSAGE' 'Problem 6';
  654. 'ERREUR' 5 ;
  655. 'FINSI' ;
  656.  
  657. ERR1 = ('ABS' (DGYGXN '-' DGYGX)) '/' cson0 ;
  658. 'SI' (ERR1 > ERRTOL) ;
  659. 'MESSAGE' 'Problem 7';
  660. 'ERREUR' 5 ;
  661. 'FINSI' ;
  662.  
  663.  
  664. ERR1 = ('ABS' (DRETGXN '-' DRETGX)) '*'
  665. (ro0 / ret0) ;
  666. 'SI' (ERR1 > ERRTOL) ;
  667. 'MESSAGE' 'Problem 8';
  668. 'ERREUR' 5 ;
  669. 'FINSI' ;
  670.  
  671. ERR1 = ('ABS' (DRGYN '-' DRGY)) ;
  672. 'SI' (ERR1 > ERRTOL) ;
  673. 'MESSAGE' 'Problem 9';
  674. 'ERREUR' 5 ;
  675. 'FINSI' ;
  676.  
  677. ERR1 = ('ABS' (DGXGYN '-' DGXGY)) '/' cson0 ;
  678. 'SI' (ERR1 > ERRTOL) ;
  679. 'MESSAGE' 'Problem 10';
  680. 'ERREUR' 5 ;
  681. 'FINSI' ;
  682.  
  683. ERR1 = ('ABS' (DGYGYN '-' DGYGY)) '/' cson0 ;
  684. 'SI' (ERR1 > ERRTOL) ;
  685. 'MESSAGE' 'Problem 11';
  686. 'ERREUR' 5 ;
  687. 'FINSI' ;
  688.  
  689. ERR1 = ('ABS' (DRETGYN '-' DRETGY)) '*'
  690. (ro0 / ret0) ;
  691. 'SI' (ERR1 > ERRTOL) ;
  692. 'MESSAGE' 'Problem 12';
  693. 'ERREUR' 5 ;
  694. 'FINSI' ;
  695.  
  696. ERR1 = ('ABS' (DRRETN '-' DRRET)) '*' (ret0 '/' (ro0 '*' cson0)) ;
  697. 'SI' (ERR1 > ERRTOL) ;
  698. 'MESSAGE' 'Problem 13';
  699. 'ERREUR' 5 ;
  700. 'FINSI' ;
  701.  
  702. ERR1 = ('ABS' (DGXRETN '-' DGXRET)) '*'
  703. (ret0 '/' (ro0 '*' cson0 * cson0)) ;
  704. 'SI' (ERR1 > ERRTOL) ;
  705. 'MESSAGE' 'Problem 14';
  706. 'ERREUR' 5 ;
  707. 'FINSI' ;
  708.  
  709. ERR1 = ('ABS' (DGYRETN '-' DGYRET)) '*'
  710. (ret0 '/' (ro0 '*' cson0 * cson0)) ;
  711. 'SI' (ERR1 > ERRTOL) ;
  712. 'MESSAGE' 'Problem 15';
  713. 'ERREUR' 5 ;
  714. 'FINSI' ;
  715.  
  716.  
  717. ERR1 = ('ABS' (DRETRETN '-' DRETRET)) '/' cson0 ;
  718. 'SI' (ERR1 > ERRTOL) ;
  719. 'MESSAGE' 'Problem 16';
  720. 'ERREUR' 5 ;
  721. 'FINSI' ;
  722.  
  723.  
  724. *****************************************************
  725. *****************************************************
  726. ******* TEST3 ***************************************
  727. *****************************************************
  728. *****************************************************
  729. *
  730. * On observe que la variation du residu
  731. * en $DOM9 . 'CENTRE' par rapport à une variation
  732. * infinitésimal en $DOM7 . 'CENTRE' doit etre nulle.
  733. *
  734.  
  735. PCEN7 = ('DOMA' $DOM7 'CENTRE') 'POIN' 1 ;
  736.  
  737. ro0 = 'EXTRAIRE' RN0 PCEN7 'SCAL' ;
  738. cson0 = ('EXTRAIRE' CN20 PCEN7 'SCAL') '**' 0.5 ;
  739. ret0 = 'EXTRAIRE' RETN0 PCEN7 'SCAL' ;
  740.  
  741. *
  742. * Le jacobien exact.
  743. *
  744.  
  745. DRR = JACOVA JACO $DOMTOT LISTINCO PCEN7 PCEN9 NOMDEN NOMDEN MAIL2 ;
  746. DGXR = JACOVA JACO $DOMTOT LISTINCO PCEN7 PCEN9 NOMDEN NOMMOX MAIL2 ;
  747. DGYR = JACOVA JACO $DOMTOT LISTINCO PCEN7 PCEN9 NOMDEN NOMMOY MAIL2 ;
  748. DRETR = JACOVA JACO $DOMTOT LISTINCO PCEN7 PCEN9 NOMDEN NOMRET MAIL2 ;
  749.  
  750. DRGX = JACOVA JACO $DOMTOT LISTINCO PCEN7 PCEN9 NOMMOX NOMDEN MAIL2 ;
  751. DGXGX = JACOVA JACO $DOMTOT LISTINCO PCEN7 PCEN9 NOMMOX NOMMOX MAIL2 ;
  752. DGYGX = JACOVA JACO $DOMTOT LISTINCO PCEN7 PCEN9 NOMMOX NOMMOY MAIL2 ;
  753. DRETGX = JACOVA JACO $DOMTOT LISTINCO PCEN7 PCEN9 NOMMOX NOMRET MAIL2 ;
  754.  
  755. DRGY = JACOVA JACO $DOMTOT LISTINCO PCEN7 PCEN9 NOMMOY NOMDEN MAIL2 ;
  756. DGXGY = JACOVA JACO $DOMTOT LISTINCO PCEN7 PCEN9 NOMMOY NOMMOX MAIL2 ;
  757. DGYGY = JACOVA JACO $DOMTOT LISTINCO PCEN7 PCEN9 NOMMOY NOMMOY MAIL2 ;
  758. DRETGY = JACOVA JACO $DOMTOT LISTINCO PCEN7 PCEN9 NOMMOY NOMRET MAIL2 ;
  759.  
  760. DRRET = JACOVA JACO $DOMTOT LISTINCO PCEN7 PCEN9 NOMRET NOMDEN MAIL2;
  761. DGXRET = JACOVA JACO $DOMTOT LISTINCO PCEN7 PCEN9 NOMRET NOMMOX MAIL2;
  762. DGYRET = JACOVA JACO $DOMTOT LISTINCO PCEN7 PCEN9 NOMRET NOMMOY MAIL2;
  763. DRETRET = JACOVA JACO $DOMTOT LISTINCO PCEN7 PCEN9 NOMRET NOMRET MAIL2;
  764.  
  765.  
  766. 'SI' (('MAXIMUM'
  767. ('PROG' DRR DGXR DGYR DRETR
  768. DRGX DGXGX DGYGX DRETGX
  769. DRGY DGXGY DGYGY DRETGY
  770. DRRET DGXRET DGYRET DRETRET ) 'ABS' )
  771. > ERRTOL) ;
  772. 'MESSAGE' 'Problem final' ;
  773. 'ERREUR' 5 ;
  774. 'FINSI' ;
  775.  
  776. *****************************************************
  777. *****************************************************
  778. ******* TEST4 ***************************************
  779. *****************************************************
  780. *****************************************************
  781. *
  782. * Jacobian == 0
  783. *
  784.  
  785. MAIL2 = 'DOMA' $DOMTOT 'FACE' ;
  786.  
  787. JACO = 'KONV' 'VF' 'PERFMONO' 'JACOCONS'
  788. $DOMTOT LISTINCO MAIL2 'VLH' RN0 VITESSE PRES GAMMAN
  789. ;
  790.  
  791. UN = 'MANUEL' 'CHPO' ('DOMA' $DOMTOT 'CENTRE') 4 NOMDEN 0.1
  792. NOMMOX 0.11 NOMMOY 0.15 NOMRET 0.17 ;
  793.  
  794. ERRO = 'MAXIMUM' ('KOPS' 'MULT' JACO UN) 'ABS' ;
  795.  
  796. 'SI' (ERRO > ERRTOL) ;
  797. 'MESSAGE' 'Problem final' ;
  798. 'ERREUR' 5 ;
  799. 'FINSI' ;
  800.  
  801. *****************************************************
  802. *****************************************************
  803. ******* TEST5 ***************************************
  804. *****************************************************
  805. *****************************************************
  806. *
  807. * Jacobian with respect to primitive variables
  808. *
  809. * We have already defined RN0, VN0, PN0, GAMN
  810. *
  811.  
  812. LISTCONS = 'MOTS' 'RN' 'RUX' 'RUY' 'RETN' ;
  813.  
  814. JACO = 'KONV' 'VF' 'PERFMONO' 'JACOCONS'
  815. $DOMTOT LISTCONS 'VLH' RN0 VN0 PN0 GAMMAN ;
  816.  
  817. LISTPRIM = 'MOTS' 'RN' 'UX' 'UY' 'PN' ;
  818.  
  819. DUDV = 'PRIM' 'CONSPRIM' ('DOMA' $DOMTOT 'CENTRE')
  820. LISTCONS LISTPRIM RN0 VN0 PN0 GAMMAN ;
  821.  
  822. JACOP = 'KONV' 'VF' 'PERFMONO' 'JACOPRIM'
  823. $DOMTOT LISTCONS LISTPRIM 'VLH' RN0 VN0 PN0 GAMMAN ;
  824.  
  825. UNP = 'MANUEL' 'CHPO' ('DOMA' $DOMTOT 'CENTRE') 4 'RN' 0.11
  826. 'UX' 0.15 'UY' 0.19 'PN' 0.21 ;
  827.  
  828. * JACOP * UNP = JACO * DUDV * UNP, \forall UNP
  829.  
  830. ERRO = 'MAXIMUM' (
  831. ('KOPS' 'MULT' JACOP UNP) '-'
  832. ('KOPS' 'MULT' JACO ('KOPS' 'MULT' DUDV UNP))
  833. ) ;
  834.  
  835. 'SI' (ERRO > ERRTOL) ;
  836. 'MESSAGE' 'Problem final' ;
  837. 'ERREUR' 5 ;
  838. 'FINSI' ;
  839.  
  840. 'FIN' ;
  841.  
  842.  
  843.  
  844.  
  845.  
  846.  
  847.  

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