Télécharger conew.dgibi

Retour à la liste

Numérotation des lignes :

  1. * fichier : conew.dgibi
  2. ************************************************************************
  3. ************************************************************************
  4. *=---------------------------------------------------------------------
  5. *= Transport d'un cone par un champ de vitesse à rotationnel constant.
  6. *= Comparaison de schéma en temps EF implicites
  7. *=---------------------------------------------------------------------
  8. *
  9. *------------------
  10. * Options générales
  11. *------------------
  12. *
  13. *$$$$ EXEC
  14. * EXEC PROCEDUR MAGN 03/03/31 21:15:04 4631
  15. *X EXEC (Procedure)
  16. * Procedure EXEC
  17. *
  18. * Objet : Execute un algorithme décrit dans une table RV
  19. * de type EQEX.
  20. * Cette table est créée par l'opérateur EQEX
  21. *
  22. * Syntaxe : EXEC RV ;
  23. *
  24. ***********************************************************************
  25. * VERSION : ????
  26. * HISTORIQUE : 20/12/99: gounand
  27. * Rajout de la gestion de la matrice servant à l'assemblage
  28. * (rv . 'METHINV' . 'MATASS')
  29. *
  30. * HISTORIQUE : 10/11/00: magnaud
  31. * Reecriture de exec pour tirer parti du // (operateur ASSI et RESO)
  32. * Pour l'instant cette procedure est testee experimentalement dans
  33. * la directive EQUA de EXEC
  34. *
  35. * HISTORIQUE : 04/04/01: magnaud
  36. * Calcul et impression tout les FIDT cycles de la norme Linf du residu
  37. *
  38. * HISTORIQUE :
  39. * HISTORIQUE :
  40. ************************************************************************
  41. * DISCPRES = (d'apres KMIC)
  42. * KPRE=3 pression P0 KPRE=4 pression P1 KPRE=2 cas macro 1ère génération
  43. * KPRE=5 pression MSOMMET
  44. ************************************************************************
  45. 'DEBPROC' EXEC ;
  46. 'ARGUMENT' rv*'TABLE ' ;
  47.  
  48. * Logique pilotant le recalcul de la matrice de pression
  49. CALPRE=FAUX ;
  50. Si ('EXIST' rv 'CALPRE') ;
  51. vertytab rv 'CALPRE' 'LOGIQUE' ;
  52. CALPRE=rv.'CALPRE' ;
  53. Finsi ;
  54.  
  55. Si(NON('EXIST' rv 'XEQUA'));
  56. rv.'XEQUA'= FAUX ;
  57. Finsi ;
  58.  
  59. ********************************************************************************
  60. ********************************************************************************
  61. ****** Directive EQUA **********************************************************
  62. ********************************************************************************
  63. ********************************************************************************
  64.  
  65. Si (rv.'XEQUA');
  66.  
  67. IMPKRES=0 ;
  68. Si ('EXIST' rv 'NUMASSI'); numassi=rv.'NUMASSI';
  69. Sinon; numassi=1 ;
  70. Finsi;
  71.  
  72.  
  73. Xdfdt = FAUX ;
  74.  
  75. ITMA=rv . 'ITMA';
  76. 'SI' ('<EG' ITMA 1) ;
  77. ITMA=1 ;
  78. 'FINSI' ;
  79.  
  80. NITER=rv . 'NITER';
  81. 'SI' ('<EG' NITER 1) ;
  82. NITER=1 ;
  83. 'FINSI' ;
  84.  
  85. OMEGA=rv . 'OMEGA';
  86. 'SI' ('<EG' NITER 1) ;
  87. OMEGA=1.;
  88. 'FINSI' ;
  89.  
  90. NUPDT=rv.'PASDETPS'.'NUPASDT';
  91.  
  92. 'SI'((NON (rv.'TRAN')) et ('>' ITMA 1) );
  93. Mess ' Incoherence : Algorithme Permanent et ITMA >1';
  94. QUITTER EXEC ;
  95. 'FINSI' ;
  96.  
  97. 'SI'((rv.'TRAN') et (NON (rv.'PROJ')) et ('EGA' NUPDT 1));
  98. Mess ' Algorithme transitoire standard implicite ou explicite ';
  99. mess '========================================================';
  100. 'FINSI' ;
  101.  
  102. 'SI'((rv.'PROJ') et ('EGA' NUPDT 1));
  103. mess 'Algorithme de Projection';
  104. mess '========================';
  105. 'FINSI' ;
  106.  
  107. 'SI' ( non (rv.'TRAN'));
  108. mess 'Algorithme de recherche d un permanent ';
  109. mess '=======================================';
  110. 'FINSI' ;
  111.  
  112.  
  113. 'REPETER' BCLTPS ITMA ;
  114. si (rv.'PROJ');
  115. testp1 = non ( exist rv 'MATC') ;
  116. sinon ;
  117. testp1 = FAUX ;
  118. finsi ;
  119. 'REPETER' BCLINT NITER ;
  120. Si (non (rv.'TRAN'));
  121. mess 'ITERATION ' &BCLINT;
  122. Finsi ;
  123.  
  124. Si (rv.'XRIG');
  125. MRIG='RGDT ';
  126. sf mau = assi numassi 'KOPS' 'RIGIDITE' ;
  127. sp map = assi numassi 'KOPS' 'RIGIDITE' ;
  128. sr mar = assi numassi 'KOPS' 'RIGIDITE' ;
  129. Sinon ;
  130. MRIG=TEXT ' ';
  131. sf mau = assi numassi 'KOPS' 'MATRIK' ;
  132. sp map = assi numassi 'KOPS' 'MATRIK' ;
  133. sr mar = assi numassi 'KOPS' 'MATRIK' ;
  134. Finsi ;
  135.  
  136. NRES=0 ;
  137.  
  138. *****************************************************
  139. * ._._. \|/
  140. * ._._. CALCUL MATRICES ELEMENTAIRES
  141. * ._._. /|\
  142. *****************************************************
  143.  
  144.  
  145. 'REPETER' bloc2 ('DIME' (rv . 'LISTOPER')) ;
  146. nomper = 'EXTRAIRE' &bloc2 (rv . 'LISTOPER') ;
  147. * mess ' Début BLOC2 nomper=' nomper ;
  148. notable= 'MOT' ('TEXTE' ('CHAINE' &bloc2 nomper)) ;
  149. Si('>EG' (rv.'IMPR') 2); mess 'Operateur ' nomper ; Finsi ;
  150. td=rv.notable ;
  151. tdk=td.'KOPT' ;
  152. iarg= rv.notable.'IARG' ;
  153. arg1 = TEXT ' ' ; arg2 = TEXT ' ' ; arg3 = TEXT ' ' ;
  154. arg4 = TEXT ' ' ; arg5 = TEXT ' ' ; arg6 = TEXT ' ' ;
  155. arg7 = TEXT ' ' ; arg8 = TEXT ' ' ; arg9 = TEXT ' ' ;
  156.  
  157. Si ('>EG' iarg 1 );
  158. Si ( EGA ('TYPE' (td.'ARG1')) 'MOT ' ) ;
  159. arg1=rv.'INCO'.(td.'ARG1') ;
  160. Sinon ;
  161. arg1=(td.'ARG1') ;
  162. Finsi ;
  163. Finsi ;
  164.  
  165. Si ('>EG' iarg 2 );
  166. Si ( EGA ('TYPE' (td.'ARG2')) 'MOT ' ) ;
  167. arg2=rv.'INCO'.(td.'ARG2') ;
  168. Sinon ;
  169. arg2=(td.'ARG2') ;
  170. Finsi ;
  171. Finsi ;
  172.  
  173. Si ('>EG' iarg 3 );
  174. Si ( EGA ('TYPE' (td.'ARG3')) 'MOT ' ) ;
  175. arg3=rv.'INCO'.(td.'ARG3') ;
  176. Sinon ;
  177. arg3=(td.'ARG3') ;
  178. Finsi ;
  179. Finsi ;
  180.  
  181. Si ('>EG' iarg 4 );
  182. Si ( EGA ('TYPE' (td.'ARG4')) 'MOT ' ) ;
  183. arg4=rv.'INCO'.(td.'ARG4') ;
  184. Sinon ;
  185. arg4=(td.'ARG4') ;
  186. Finsi ;
  187. Finsi ;
  188.  
  189. * Traitement du cas transitoire
  190. XTRA =CHAI 'PERM' ; DT = TEXT ' ' ; SCHE=TEXT ' ' ;
  191. inc1 = TEXT ' ' ; inc2 = TEXT ' ' ;
  192. imc1 = TEXT ' ' ; imc2 = TEXT ' ' ;
  193. BETAT= TEXT ' ' ;
  194. XBDF2 = FAUX ;
  195.  
  196. XOT=(('EGA' nomper 'NS ') ou ('EGA' nomper 'TSCA ')
  197. ou ('EGA' nomper 'DFDT ') ou ('EGA' nomper 'TSCAL '));
  198.  
  199. Si (rv.'PROJ' et ('EGA' nomper 'KBBT ')) ;
  200. XTRA=CHAI 'PROJ' ;
  201. Finsi ;
  202.  
  203. Si (rv.'TRAN') ;
  204. Xdfdt = VRAI ;
  205. XTRA=CHAI 'TRANS' ;
  206. Si (rv.'PROJ') ; XTRA=CHAI 'PROJ' ; Finsi ;
  207. DT=(rv.'DELTAT') ;
  208. Si ( EGA ('TYPE' DT) 'MOT ' ) ;
  209. DT=rv.'INCO'.DT ;
  210. Finsi ;
  211. SCHE = rv.'SCHEMAT';
  212. Si (EGA SCHE 'SEMI');
  213. BETAT=(rv.'Betat') ;
  214. Finsi ;
  215. Si (EGA SCHE 'BDF2');
  216. XBDF2 = VRAI ;
  217. Finsi ;
  218. Finsi ;
  219.  
  220. nbic=dime td.'LISTINCO';
  221.  
  222. Si ('>EG' nbic 1 );
  223. ninc1=extr td.'NUMEINCO' 1 ;
  224. a= chai 'FORMAT' '(A3,I1)' 'INC' ninc1 ;
  225. inc1=rv.'INCO'.(rv.a);
  226. Si (XBDF2) ;
  227. a= chai 'FORMAT' '(A3,I1)' 'IMC' ninc1 ;
  228. imc1=rv.'INCO'.(rv.a);
  229. Finsi;
  230. Finsi ;
  231.  
  232. Si ('>EG' nbic 2 );
  233. ninc2=extr td.'NUMEINCO' 2 ;
  234. a= chai 'FORMAT' '(A3,I1)' 'INC' ninc2 ;
  235. inc2=rv.'INCO'.(rv.a);
  236. Si (XBDF2) ;
  237. a= chai 'FORMAT' '(A3,I1)' 'IMC' ninc2 ;
  238. imc2=rv.'INCO'.(rv.a);
  239. Finsi;
  240. Finsi ;
  241.  
  242.  
  243. MM=TEXT ' ';
  244. DCEN='????' ;
  245. Si(EGA (tdk.'MTRMASS') 2 );MM='MMDIAGO';Finsi;
  246. Si(EGA (tdk.'IDCEN') 1 );DCEN='CENTREE';Finsi;
  247. Si(EGA (tdk.'IDCEN') 2 );DCEN='SUPGDC ';Finsi;
  248. Si(EGA (tdk.'IDCEN') 3 );DCEN='SUPG ';Finsi;
  249. Si(EGA (tdk.'IKOMP') 0 );MC=TEXT ' ';Finsi;
  250. Si(EGA (tdk.'IKOMP') 1 );MC='CONS';Finsi;
  251.  
  252. INEFMD= tdk.'INEFMD' ;
  253. tdz=TEXT ' ' ;
  254. Si (EGA nomper 'VNIMP ');
  255. tdz=CHAI 'V' ;
  256. nomper= text 'NS';
  257. Finsi ;
  258.  
  259. * temp place ;
  260. * mess ' Avant ' nomper ' tdz ' tdz ' DT=' DT ' XTRA=' ; list xtra ;
  261. * mess SCHE ; mess BETAT;
  262. msi mai =assi numassi nomper tdz
  263. (td.'DOMZ') (td.'LISTINCO') (td.'TYPEINCO') (rv.'TYPPRESS')
  264. INEFMD MRIG MM 'CONS' 'STABP' (tdk.'STABP') 'CMD' (tdk.'CMD') DCEN
  265. XTRA DT SCHE BETAT
  266. 'INCO' inc1 imc1 inc2 imc2
  267. (td.'IARG') arg1 arg2 arg3 arg4 ;
  268. * temp place ;
  269. * mess ' Apres ' nomper;
  270.  
  271. Si ((rv.'PROJ') et ('EGA' nomper 'KBBT '));
  272. msp =assi numassi msi ;
  273. mac =assi numassi mai ;
  274. 'ITER' bloc2 ;
  275. Finsi ;
  276.  
  277. Si ((rv.'PROJ') et ('EGA' nomper 'DFDT '));
  278. mam =assi numassi mai ;
  279. Finsi ;
  280.  
  281. * Si ((rv.'PROJ') et ('EGA' nomper 'TOIMP '));
  282. * list msi ;
  283. * Finsi ;
  284.  
  285. Si ((rv.'PROJ') et ('EGA' nomper 'NS '));
  286. XTRA=CHAI 'TRANS' ;
  287. DT=(rv.'DELTAT') ;
  288. Si ( EGA ('TYPE' DT) 'MOT ' ) ;
  289. DT=rv.'INCO'.DT ;
  290. Finsi ;
  291. SCHE = rv.'SCHEMAT';
  292. Si (EGA SCHE 'SEMI');
  293. BETAT=(rv.'Betat') ;
  294. Finsi ;
  295. Si (EGA SCHE 'BDF2');
  296. XBDF2 = VRAI ;
  297. Finsi ;
  298. * mess ' Appel DFDT DT=' DT ' XTRA=' ; list xtra ;
  299. msm mam =assi numassi DFDT
  300. (td.'DOMZ') (td.'LISTINCO') (td.'TYPEINCO') (rv.'TYPPRESS')
  301. INEFMD MRIG MM 'CONS' 'CMD' (tdk.'CMD') DCEN
  302. XTRA DT SCHE BETAT
  303. 'INCO' inc1 imc1 inc2 imc2
  304. 1 arg1 ;
  305. oubli msm;
  306. Finsi ;
  307.  
  308. mau = assi numassi mau 'ET' mai ;
  309. sf = assi numassi sf 'ET' msi ;
  310.  
  311.  
  312. rv.'TVNP'=FAUX;
  313. rv.'TVNPC'=FAUX;
  314.  
  315. Si ('EGA' nomper 'VNIMP '); *
  316. mess ' Cas oper VNIMP' ;
  317. Si (ega (rv.'TYPPRESS') 'MSOMMET');
  318. rv.'TVNPC'=VRAI;
  319. mvnpc=mai ;
  320. svnpc=msi ;
  321. Sinon ;
  322. rv.'TVNP'=VRAI ;
  323. mar = assi numassi mar 'ET' mai ;
  324. sr = assi numassi sr 'ET' msi ;
  325. Finsi ;
  326. Sinon ;
  327.  
  328. Finsi ;
  329.  
  330. 'FIN' bloc2 ;
  331. *mess 'Fin Bloc2 ' ;
  332.  
  333. 'SI'((rv.'TRAN') et (NON Xdfdt));
  334. Mess ' Incoherence : Algorithme Transitoire '
  335. ' et pas d increment en temps';
  336. Mess ' Il manque un operateur DFDT NS ou TSCA ';
  337. QUITTER EXEC ;
  338. 'FINSI' ;
  339.  
  340. NRES=NRES+1;
  341. *mess 'NRES=' NRES;
  342. TABRES=chai 'FORMAT' '(A6,I1)' 'TABRES' NRES;
  343. Si (NON('EXIST' rv TABRES)); rv.TABRES=TABLE ; Finsi ;
  344. Si (NON ('EGA' ('TYPE' rv.TABRES) 'TABLE '));
  345. rv.TABRES=TABLE ;
  346. Finsi ;
  347.  
  348. rv.TABRES.'mau' =mau ;
  349. rv.TABRES.'sf' =sf ;
  350. rv.TABRES.'clim'=rv.'CLIM' ;
  351. rv.TABRES.'METHINV'=rv.'METHINV' ;
  352.  
  353. *****************************************************
  354. * __ |\
  355. * \ /_/o | | \|/
  356. * \=> \_\/ \| --O-- PROJECTION
  357. * /|\ /\ /|\
  358. *************/*|*\***********************************
  359.  
  360. 'SI' (rv.'PROJ');
  361. SCHE = rv.'SCHEMAT';
  362. cnvi1=chai 'FORMAT' '(I1,A3)' 1 (extr rv.'LISTINCO' 1) ;
  363. cnvi2=chai 'FORMAT' '(I1,A3)' 2 (extr rv.'LISTINCO' 1) ;
  364. cnvi3=chai 'FORMAT' '(I1,A3)' 3 (extr rv.'LISTINCO' 1) ;
  365. cnppp=chai 'FORMAT' '(I1,A3)' 3 (extr rv.'LISTINCO' 2) ;
  366. 'SI' (testp1) ;
  367. mess ' CALCUL de CMCT ' ;
  368. Diag = doma (rv.'MODELE') 'XXDIAGSI' ;
  369. Digv= (nomc Diag cnvi1) et (nomc Diag cnvi2) ;
  370. Si ('EGA' (VALE DIME) 3);
  371. Digv= Digv et (nomc Diag cnvi3);
  372. Finsi ;
  373.  
  374. * Diag : Matrice diagonale de base ('SCAL')
  375. * Digv : Matrice diagonale de base ('1U' '2U' '3U')
  376. * Digvl: Matrice diagonale contenant les conditions aux limites
  377.  
  378. IDiag = 'INVERSE' Digv ;
  379.  
  380. Digvl= 'KOPS' Digv 'CLIM' (rv . 'CLIM') -1;
  381. IDigvl= 'INVERSE' Digvl ;
  382.  
  383. *
  384. * Calcul matrices MD-1
  385. *
  386. MDM1='KMF' mam IDiag ;
  387. Si ('EGA' SCHE 'BDF2'); MDM1=MDM1 * (((rv.'DELTAT')*2.)/3.) ;
  388. Sinon ; MDM1=MDM1 * (rv.'DELTAT') ;
  389. Finsi ;
  390. *
  391. * Calcul matrices C
  392. *
  393. * msp mac =assi numassi 'KBBT'
  394. * (rv.'MODELE') (rv.'LISTINCO') (rv.'TYPEINCO') (rv.'TYPPRESS')
  395. * MRIG (1) (1.) ;
  396.  
  397. matpc mac = kops 'CMCTSPLT' mac ;
  398.  
  399. Si ('EGA' (rv.'TYPPRESS') 'MSOMMET');
  400. mess ' Cas des pressions continues' ;
  401. incp= mots (extr rv.'LISTINCO' 2) ;
  402. msp matpr =assi numassi 'LAPN'
  403. (rv.'MODELE') incp (mots 'TEMPERAT')
  404. MRIG 'LINE' (1) (1.) ;
  405.  
  406. Sinon ;
  407. mess ' Cas des pressions discontinues' ;
  408.  
  409. Si (rv.'TVNPC'); mac=mac et mvnpc; Finsi;
  410. rv . 'MATC' = mac ;
  411. * list mac 4 ;
  412. scr mcr = 'KOPS' 'MATRIK' ;
  413. Si (rv.'TVNP') ;
  414. rv . 'MBTR' = mar ;
  415. Dunit=Idigv;
  416. crt= kops 'CMCT' mac mar (Dunit) ;
  417. ctr= kops 'CMCT' mar mac (Dunit) ;
  418. rrt= kops 'CMCT' mar mar (Dunit) ;
  419. mcr= mcr et crt et ctr et rrt ;
  420. Finsi ;
  421.  
  422. * list mac 3 ;list IDigvl;
  423. matpr = kops 'CMCT' mac mac IDigvl;
  424. * mess 'APRES CMCT' ; list matpr 3 ;
  425. matpr = matpc et matpr et mcr ;
  426.  
  427. Finsi ;
  428.  
  429. rv.'IDigvl'= IDigvl ;
  430. rv.'MATP' = matpr ;
  431. rv.'MATC' = mac ;
  432. rv.'MDM1' = MDM1 ;
  433.  
  434. 'FINSI' ;
  435.  
  436. IDigvl= rv.'IDigvl';
  437. matpr = rv.'MATP' ;
  438. mac = rv.'MATC' ;
  439. MDM1 = rv.'MDM1' ;
  440.  
  441.  
  442. 'SI' ('EXIST' (rv.'INCO') 'PINM1') ;
  443. **
  444. ** mess ' t n-1' ;
  445. ** mess 'Calcul de C P' ;
  446. **
  447.  
  448. pinm1= rv.'INCO'.'PINM1';
  449. * cpi2=(extr rv.'LISTINCO' 2) ;
  450. * pinm1= nomc (rv.'INCO'.(rv.'INC2')) cpi2;
  451. cpre = 'KMF' (rv . 'MATC') pinm1 'TRAN' ;
  452. Si (rv.'TVNP') ;
  453. cxre = 'KMF' (rv . 'MBTR') pinm1 'TRAN' ;
  454. cpre = cpre et cxre ;
  455. Finsi ;
  456.  
  457. Si ('EGA' (rv.'TYPPRESS') 'MSOMMET');
  458. gradpres = 'KOPS' MDM1 '*' cpre ;
  459. Sinon ;
  460. gradpres = 'KOPS' MDM1 '*' cpre ;
  461. Finsi ;
  462. gradpres = nomc (mots 'UX' 'UY' 'UZ')
  463. (mots cnvi1 cnvi2 cnvi3) gradpres;
  464.  
  465. oublier cpre ;
  466. rv.'INCO'.'GRADPRES' = gradpres ;
  467. sf = sf - (rv.'INCO'.'GRADPRES') ;
  468. rv.'TABRES1'.'sf'=sf ;
  469.  
  470. 'FINSI' ;
  471. clim = exco rv.'CLIM' (mots cnvi1 cnvi2 cnvi3) 'NOID' ;
  472. rv.'TABRES1'.'clim'=clim ;
  473.  
  474. ********** FIN Traitement PRESSION ************************
  475. * mess ' FIN Traitement PRESSION' ;
  476.  
  477. 'FINSI' ;
  478. *******************************************************
  479.  
  480.  
  481. *****************************************************
  482. * \___\ /
  483. * \/ RESOLUTION
  484. * \ \|/
  485. *************************--O--***********************
  486. res mau = assi numassi 'KOPS' 'MATRIK' ;
  487. Si (rv.XRIG);
  488. res = chan res 'ATTRIBUT' 'NATURE' 'DIFFUS' ;
  489. Finsi ;
  490. Repeter Bclres NRES ;
  491. * mess ' Resolution ' NRES ;
  492. TABRES=rv.(chai 'FORMAT' '(A6,I1)' 'TABRES' &Bclres);
  493. MTIV = TABRES.'METHINV';
  494. mau = TABRES.'mau' ;
  495. sf = TABRES.'sf' ;
  496. clim = TABRES.'clim';
  497. *........................................................
  498. Si (rv.'XRIG') ;
  499. gclim=extr clim 'MAILLAGE' ;
  500. rclim=bloq 'T' gclim ;
  501. dclim=depi rclim (nomc 'T' clim);
  502. mau = mau et rclim ;
  503. sf = sf et dclim ;
  504. * list mau; list sf ;
  505. res1 = 'RESO' mau sf ;
  506. res = ASSI numassi res1 et res ;
  507. Sinon ;
  508. MATASS= mau ;
  509. TYRENU=MTIV.'TYRENU';PCMLAG=MTIV.'PCMLAG';KTYPI =MTIV.'TYPINV';
  510. XINIT=TEXT ' ' ;DI2 = TEXT ' ' ;DI3 = TEXT ' ' ;
  511. DI4 = TEXT ' ' ;DI5 = TEXT ' ' ;
  512. MAPREC=TEXT ' ';KPREC =TEXT ' ';PR3 = TEXT ' ' ;
  513. PR4 = TEXT ' ' ;PR5 = TEXT ' ' ;
  514. Si (('>EG' KTYPI 2) ET ('<EG' KTYPI 5));
  515. XINIT mar = assi numassi 'KOPS' 'MATRIK' ;
  516. DI2=MTIV.'NITMAX';DI3=MTIV.'RESID';DI4=MTIV.'BCGSBTOL';
  517. Si ('EGA' KTYPI 5);DI5=MTIV.'GMRESTRT';Finsi ;
  518. MAPREC= mau ;
  519. KPREC=MTIV.'PRECOND';
  520. Si ('EGA' KPREC 4);PR3=MTIV.'MILURELX';Finsi ;
  521. Si (('EGA' KPREC 5) OU ('EGA' KPREC 6));
  522. PR4=MTIV.'ILUTLFIL';PR5=MTIV.'ILUTDTOL';
  523. Finsi ;
  524. Finsi ;
  525. * list mau 3 ;
  526. * list sf ;
  527. res1 = ASSI numassi 'KRES' 'LL' mau
  528. 'TYPI' MTIV KTYPI 'CLIM' clim 'SMBR' sf
  529. 'IMPR' IMPKRES MATASS TYRENU PCMLAG
  530. XINIT DI2 DI3 DI4 DI5
  531. MAPREC KPREC PR3 PR4 PR5;
  532. res = ASSI numassi res1 et res ;
  533. Finsi;
  534. *........................................................
  535. Fin Bclres ;
  536.  
  537. rv.inco.'Res'=res ;
  538.  
  539. 'SI' (rv.'PROJ');
  540. **
  541. * mess 'RESOLUTION : ETAPE DE PROJECTION ' ;
  542. ** _n
  543. ** C U
  544. cun = ('KMF' (rv . 'MATC') res)*(1./(rv.'DELTAT')) ;
  545. Si (rv.'TVNP');
  546. cxn = ('KMF' (rv . 'MBTR') res)*(1./(rv.'DELTAT')) ;
  547. cun = cun et cxn ;
  548. Finsi ;
  549. clim=exco (rv.'CLIM') (mots (extr rv.'LISTINCO' 2)) 'NOID';
  550. MTIV=rv.'METHINV2' ;
  551.  
  552. *........................................................
  553. Si (rv.'XRIG') ;
  554. gclim=extr clim 'MAILLAGE' ;
  555. rclim=bloq 'T' gclim ;
  556. dclim=depi rclim (nomc 'T' clim);
  557. matpr = matpr et rclim ;
  558. cun = cun et dclim ;
  559. sl = 'RESO' matpr cun ;
  560. Sinon ;
  561. MATASS= matpr ;
  562. TYRENU=MTIV.'TYRENU';PCMLAG=MTIV.'PCMLAG';KTYPI =MTIV.'TYPINV';
  563. XINIT=TEXT ' ' ;DI2 = TEXT ' ' ;DI3 = TEXT ' ' ;
  564. DI4 = TEXT ' ' ;DI5 = TEXT ' ' ;
  565. MAPREC=TEXT ' ';KPREC =TEXT ' ';PR3 = TEXT ' ' ;
  566. PR4 = TEXT ' ' ;PR5 = TEXT ' ' ;
  567. Si (('>EG' KTYPI 2) ET ('<EG' KTYPI 5));
  568. XINIT mar = assi numassi 'KOPS' 'MATRIK' ;
  569. DI2=MTIV.'NITMAX';DI3=MTIV.'RESID';DI4=MTIV.'BCGSBTOL';
  570. Si ('EGA' KTYPI 5);DI5=MTIV.'GMRESTRT';Finsi ;
  571. MAPREC= matpr;
  572. KPREC=MTIV.'PRECOND';
  573. Si ('EGA' KPREC 4);PR3=MTIV.'MILURELX';Finsi ;
  574. Si (('EGA' KPREC 5) OU ('EGA' KPREC 6));
  575. PR4=MTIV.'ILUTLFIL';PR5=MTIV.'ILUTDTOL';
  576. Finsi ;
  577. Finsi ;
  578. sl = ASSI numassi 'KRES' 'LL' matpr
  579. 'TYPI' MTIV KTYPI 'CLIM' clim 'SMBR' cun
  580. 'IMPR' IMPKRES MATASS TYRENU PCMLAG
  581. XINIT DI2 DI3 DI4 DI5
  582. MAPREC KPREC PR3 PR4 PR5;
  583. Finsi;
  584. *........................................................
  585. ctl = 'KMF' (rv . 'MATC') sl 'TRAN' ;
  586. Si(rv.'TVNP') ;
  587. cxl = 'KMF' (rv . 'MBTR') sl 'TRAN' ;
  588. ctl = ctl + cxl ;
  589. Finsi ;
  590. a=KOPS IDigvl '*' ctl ;
  591. au = nomc (mots 'UX' 'UY' 'UZ')(mots cnvi1 cnvi2 cnvi3) a ;
  592. oublier ctl ;
  593. res = res - (au*(rv.'DELTAT')) ;
  594. 'FINSI' ;
  595.  
  596.  
  597. *************************--O--***********************
  598. * \ /|\
  599. * /\____ RELAXATION
  600. * / \ \
  601. *****************************************************
  602. nbic=dime rv.'LISTINCO';
  603. omega=rv.'OMEGA';
  604. NUPDT=rv.'PASDETPS'.'NUPASDT';
  605. LRA= CHAI 'Pas de temps ' NUPDT ' ERREUR LINF : ' ;
  606. 'SI' ('MULT' NUPDT (rv.'FIDT'));
  607. Si('EXIST' rv.'PASDETPS' 'NUPDT');
  608. rv.'PASDETPS'.'NUPDT'=rv.'PASDETPS'.'NUPDT' et (PROG NUPDT) ;
  609. Sinon ;
  610. rv.'PASDETPS'.'NUPDT'= (PROG NUPDT) ;
  611. Finsi ;
  612. 'FINSI' ;
  613. Repeter Relax nbic;
  614.  
  615. a= chai 'FORMAT' '(A3,I1)' 'INC' &relax ;
  616.  
  617. Si (XBDF2) ;
  618. b= chai 'FORMAT' '(A3,I1)' 'IMC' &relax ;
  619. rv.'INCO'.(rv.b)=rv.'INCO'.(rv.a);
  620. * mess ' On fait ' (rv.a) ' -> ' (rv.b) ;
  621. Finsi ;
  622.  
  623. nc =extr rv.'LISTINCO' &relax;
  624. nc1=mots nc ;
  625. nc2=mots 'SCAL' ;
  626. ty=extr rv.'TYPEINCO' &relax;
  627. * mess ' Composante ' nc ' Type inco ' ty ;
  628. Si (('EGA' ty 'VITESSE ') et ('EGA' ('VALEUR' 'DIME') 2));
  629. nc2=mots 'UX' 'UY' ;
  630. a1= chai 'FORMAT' '(I1,A3)' 1 nc ;
  631. a2= chai 'FORMAT' '(I1,A3)' 2 nc ;
  632. nc1=mots a1 a2 ;
  633. Finsi ;
  634. Si (('EGA' ty 'VITESSE ') et ('EGA' ('VALEUR' 'DIME') 3));
  635. nc2=mots 'UX' 'UY' 'UZ' ;
  636. a1= chai 'FORMAT' '(I1,A3)' 1 nc ;
  637. a2= chai 'FORMAT' '(I1,A3)' 2 nc ;
  638. a3= chai 'FORMAT' '(I1,A3)' 3 nc ;
  639. nc1=mots a1 a2 a3 ;
  640. Finsi ;
  641. ri= exco nc1 res nc2 'NOID';
  642. nbc=dime (extr ri 'COMP') ;
  643. Si('EGA' nbc 0);
  644. Si('EGA' NUPDT 1);
  645. Mess ' ATTENTION La (ou les) composante(s) suivantes ne sont pas'
  646. ' calculees' ;
  647. list nc1 ;
  648. Finsi ;
  649. Sinon ;
  650. 'SI' ('MULT' NUPDT (rv.'FIDT'));
  651. eri=ri - rv.'INCO'.(rv.a);
  652. ELI=MAXI ERI 'ABS';
  653. ELI=(LOG (ELI + 1.0E-10))/(LOG 10.);
  654. LRA= CHAI LRA ' ' (rv.a) ' ' ELI ;
  655. ER = PROG ELI;
  656. ERA=CHAI 'ERLI' (rv.a);
  657. Si('EXIST' rv.'PASDETPS' ERA);
  658. rv.'PASDETPS'.ERA=rv.'PASDETPS'.ERA et ER ;
  659. Sinon ;
  660. rv.'PASDETPS'.ERA= ER ;
  661. Finsi ;
  662. 'FINSI' ;
  663.  
  664. rv.'INCO'.(rv.a)=(omega*ri) + ((1. - omega)*rv.'INCO'.(rv.a)) ;
  665. Finsi ;
  666.  
  667. Fin Relax ;
  668.  
  669. 'SI' ('MULT' NUPDT (rv.'FIDT'));
  670. MESS LRA ;
  671. 'FINSI' ;
  672.  
  673. Fin BCLINT ;
  674.  
  675. ***** Avancement en temps
  676. rv.inco.'Resnm'=res ;
  677. rv.'PASDETPS'.'NUPASDT'=rv.'PASDETPS'.'NUPASDT' + 1 ;
  678. * Algorithme de projection P(n+1) = P(n) + (sl / dt)
  679. 'SI' (rv.'PROJ');
  680.  
  681. 'SI' ('EXIST' (rv.'INCO') 'PINM1') ;
  682.  
  683. * PNM1=(-1.)*rv.'INCO'.'PRESSION' ;
  684. PNM1=(-1.)*rv.'INCO'.(rv.'INC2') ;
  685. si (XBDF2) ;
  686. PN=PNM1 + (1.5*sl) ;
  687. sinon ;
  688. PN=PNM1 + (sl) ;
  689. finsi ;
  690.  
  691. * rv.'INCO'.'PRESSION'=(-1.)*PN ;
  692. rv.'INCO'.(rv.'INC2')=(-1.)*PN ;
  693. rv.'INCO'.'PINM1'=PN ;
  694. 'SINON' ;
  695. * rv.'INCO'.'PRESSION' = (-1.)*(sl) ;
  696. rv.'INCO'.(rv.'INC2')= (-1.)*(sl) ;
  697. rv.'INCO'.'PINM1'=(2.*sl);
  698. 'FINSI' ;
  699. 'OUBLIER' sl ;
  700. 'FINSI' ;
  701. ***** Avancement en temps FIN
  702. Fin BCLTPS ;
  703.  
  704. QUITTER EXEC ;
  705. Finsi ;
  706. ********************************************************************************
  707. ********************************************************************************
  708. ****** Fin directive EQUA ******************************************************
  709. ********************************************************************************
  710. ********************************************************************************
  711.  
  712. 'SI' ('EGA' (rv . 'NAVISTOK') 0) ;
  713. EXAC rv ;
  714. 'QUITTER' EXEC ;
  715. 'FINSI' ;
  716.  
  717. *******PROJ*************************************************************
  718. *******PROJ Trois possibilités *****************************************
  719. *******PROJ TMDM1 (vrai)_> Correction Gresho NON
  720. *******PROJ TGRAD (vrai)-> Formulation Gradient NON
  721. *******PROJ TPNM2 (vrai)-> elimination end of step velocity OUI
  722. *******PROJ TMDM1 = VRAI TGRAD = FAUX TPNM2 = FAUX ancien algo
  723. TYPROJ='VPI1' ;
  724. 'SI' ('EXIST' RV 'TYPROJ') ;
  725. TYPROJ=RV.'TYPROJ' ;
  726. 'SI' (non (exist (MOTS 'PSCT' 'VPI1' 'VPI2') TYPROJ));
  727. Mess '*********************************************************' ;
  728. Mess ' ERREUR ERREUR ERREUR ERREUR ERREUR ERREUR ' ;
  729. Mess ' ' ;
  730. Mess 'Le mot ' TYPROJ ' n existe pas dans la liste.';
  731. Mess 'Les méthodes de projection autorisées sont :';
  732. Mess 'VPI1 et VPI2 ' ;
  733. Mess '*********************************************************' ;
  734. erreur 21 ;
  735. quitter EXEC ;
  736. 'FINSI' ;
  737. 'FINSI' ;
  738.  
  739. 'SI' ('EGA' TYPROJ 'PSCT') ;
  740. TGRAD = FAUX ;
  741. TMDM1 = FAUX ;
  742. TPNM2 = FAUX ;
  743. 'FINSI' ;
  744. 'SI' ('EGA' TYPROJ 'VPI1') ;
  745. TGRAD = FAUX ;
  746. TMDM1 = VRAI ;
  747. TPNM2 = FAUX ;
  748. 'FINSI' ;
  749. 'SI' ('EGA' TYPROJ 'VPI2') ;
  750. TGRAD = FAUX ;
  751. TMDM1 = FAUX ;
  752. TPNM2 = VRAI ;
  753. 'FINSI' ;
  754.  
  755. *******PROJ Trois possibilités *****************************************
  756. *******PROJ*************************************************************
  757.  
  758. nomvi=rv . 'NOMVI' ;
  759.  
  760. 'SI' ('EGA' ('VALEUR' 'DIME') 2) ;
  761. vnul=0.D0 0.D0 ;
  762. vuni=1.D0 1.D0 ;
  763. cnvi1= 'MOT' ('TEXTE' ('CHAINE' 1 nomvi)) ;
  764. cnvi2= 'MOT' ('TEXTE' ('CHAINE' 2 nomvi)) ;
  765. lc= mots cnvi1 cnvi2 ;
  766. lcu=mots 'UX' 'UY' ;
  767. 'SINON' ;
  768. vnul=0.D0 0.D0 0.D0 ;
  769. vuni=1.D0 1.D0 1.D0 ;
  770. cnvi1= 'MOT' ('TEXTE' ('CHAINE' 1 nomvi)) ;
  771. cnvi2= 'MOT' ('TEXTE' ('CHAINE' 2 nomvi)) ;
  772. cnvi3= 'MOT' ('TEXTE' ('CHAINE' 3 nomvi)) ;
  773. lc= mots cnvi1 cnvi2 cnvi3 ;
  774. lcu=mots 'UX' 'UY' 'UZ' ;
  775. 'FINSI' ;
  776. 'SI' ('NON' ('EXISTE' rv 'OMEGA')) ;
  777. omeg=1.D0 ;
  778. 'SINON' ;
  779. omeg=rv . 'OMEGA' ;
  780. 'FINSI' ;
  781.  
  782. testpr ='EXISTE' rv 'PRESSION' ;
  783. testprj ='EXISTE' rv 'PROJ' ;
  784. testran=testpr 'ET' ('EXISTE' rv 'CO') ;
  785.  
  786. si testpr ; rvp = rv.'PRESSION' ;
  787. achp matpr= 'KOPS' 'MATRIK' ;
  788. rvp.'MATP'= matpr;
  789. finsi ;
  790. si testprj; rvp = rv.'PROJ' ; Finsi ;
  791.  
  792. 'SI' (rv.'IMPR' >EG 1) ;
  793. si testpr ;
  794. mess 'Algorithme semi explicite (ANCIEN)';
  795. mess '==================================';
  796. Finsi ;
  797. si testprj;
  798. mess 'Algorithme de Projection';
  799. mess '========================';
  800. finsi ;
  801. si ( non (testpr ou testprj)) ;
  802. mess 'Algorithme standard implicite ou explicite ';
  803. mess '===========================================';
  804. finsi ;
  805. 'FINSI' ;
  806.  
  807. 'SI' ('NON' ('EXISTE' rv 'HIST')) ;
  808. rv . 'HIST' = 'TABLE' ;
  809. 'FINSI' ;
  810.  
  811.  
  812. ITMA=(rv . 'ITMA') ;
  813. IMPTCRR=0 ;
  814. IMPKRES=0 ;
  815. 'SI' ('<EG' ITMA 1) ;
  816. ITMA=1 ;
  817. IMPTCRR=1 ;
  818. 'FINSI' ;
  819. Si (testprj ) ; IMPTCRR=1 ; finsi ;
  820. Si ( non (testpr ou testprj)) ; IMPTCRR=1 ; finsi ;
  821.  
  822.  
  823. * Gestion de la matrice de préconditionnement
  824. *
  825. * calass : doit-on recalculer l'assemblage
  826. * calprec : doit-on recalculer le préconditionneur
  827. * calassp : idem pour la matrice de pression
  828. * calprecp: idem pour la matrice de pression
  829. * fcprect : fréquence de recalcul du préc. en fn du pas de temps
  830. * fcpreci : fréquence de recalcul du préc. dans la boucle
  831. * d'itérations internes pour les non-linéarités
  832. * resmn : le résidu au pas de temps ou à l'itération interne précédente
  833. *
  834. calprec = VRAI ;
  835. fcprect = rv. 'METHINV' . 'FCPRECT' ;
  836. fcpreci = rv. 'METHINV' . 'FCPRECI' ;
  837. resmn maprec = 'KOPS' 'MATRIK' ;
  838. resmn1 maprec1 = 'KOPS' 'MATRIK' ;
  839. resmn2 maprec2 = 'KOPS' 'MATRIK' ;
  840. 'SI'(exist rv 'resmn');resmn=rv.'resmn' ; finsi ;
  841. 'SI'(non (exist rv 'calprec'));rv.'calprec'=VRAI;finsi;
  842. 'SI'(non (exist rv 'calass' ));rv.'calass' =VRAI;calass =VRAI;finsi;
  843. 'REPETER' bloc1 ITMA ;
  844. * mess ' DEBUT BLOC1 ';
  845.  
  846. testp1 = FAUX ;
  847. si (testpr ou testprj) ;
  848. Si CALPRE ; testp1=VRAI ; Finsi ;
  849. Si (non (exist rvp 'MATC')) ; testp1=VRAI ; Finsi ;
  850. finsi ;
  851.  
  852. 'SI' ('MULT' (&bloc1 '+' 1) fcprect) ;
  853. rv.'calprec' = VRAI ;
  854. 'FINSI' ;
  855. 'REPETER' bloci (rv . 'NITER') ;
  856. 'SI' ('MULT' (&bloci '+' 1) fcpreci) ;
  857. rv.'calprec' = VRAI ;
  858. 'FINSI' ;
  859.  
  860. 'SI' (testprj) ;
  861. calprecp=VRAI ;
  862. calassp =VRAI ;
  863. si (exist rvp 'calprecp' ) ; calprecp=rvp.'calprecp';
  864. maprec1=rvp.'maprec1' ;finsi ;
  865. si (exist rvp 'calassp' ) ; calassp=rvp.'calassp';
  866. matass1=rvp.'matass1' ;finsi ;
  867. fcprectp = rvp . 'METHINV' . 'FCPRECT' ;
  868. 'SI' ('MULT' (&bloc1 '+' 1) fcprectp) ;
  869. calprecp= VRAI ;
  870. 'FINSI' ;
  871. 'FINSI' ;
  872.  
  873.  
  874.  
  875. st mat = 'KOPS' 'MATRIK' ;
  876. sf mau = 'KOPS' 'MATRIK' ;
  877.  
  878.  
  879. mdfdt = 0 ;
  880. 'REPETER' bloc2 ('DIME' (rv . 'LISTOPER')) ;
  881. nomper = 'EXTRAIRE' &bloc2 (rv . 'LISTOPER') ;
  882. notable= 'MOT' ('TEXTE' ('CHAINE' &bloc2 nomper)) ;
  883. * mess 'Operateur Bloc2 mdfdt ? ' nomper ;
  884. mdfdt = mdfdt + rv. notable . 'KOPT' . 'KFORM' ;
  885.  
  886. si (ega nomper 'DFDT ');
  887. ISCHT= (rv . notable.kopt.'ISCHT') ;
  888. msi mai=('TEXTE' nomper) (rv . notable) ;
  889. mat = mat 'ET' mai ;
  890. st = st 'ET' msi ;
  891.  
  892. sinon ;
  893.  
  894. * mess ' 1OPER =' nomper;
  895. msi mai=('TEXTE' nomper) (rv . notable) ;
  896. mau = mau 'ET' mai ;
  897. sf = sf 'ET' msi ;
  898.  
  899. finsi ;
  900.  
  901. 'FIN' bloc2 ;
  902.  
  903. s2 = sf et st ;
  904. ma1 = mau 'ET' mat ;
  905.  
  906. ********** Traitement PRESSION ****************************
  907. *mess 'Traitement PRESSION';
  908.  
  909. 'SI' (exist rv 'rvpd') ;
  910. rvpd = rv.'rvpd' ;
  911. IDigv=rv.'IDigv';
  912. Digv=rv.'Digv';
  913. matpr= rvp.'MATP' ;
  914. 'FINSI' ;
  915.  
  916. */1 CALCUL de CMCT pour PRESSION
  917. 'SI' (testpr et testp1) ;
  918.  
  919. rvpd = (rvp.'DOMAINE') ;
  920. Diago = doma rvpd 'XXDIAGSI' ;
  921. si ( ega ('VALEUR' 'DIME') 2) ;
  922. Digv= ( exco Diago 'SCAL' cnvi1 ) et ( exco Diago 'SCAL' cnvi2 ) ;
  923. sinon ;
  924. Digv= ( exco Diago 'SCAL' cnvi1 ) et ( exco Diago 'SCAL' cnvi2 ) et
  925. ( exco Diago 'SCAL' cnvi3 ) ;
  926. finsi ;
  927. Digv = kcht rvpd vect sommet comp lc Digv ;
  928.  
  929. 'SI' ('EXISTE' rv 'CLIM') ;
  930. rvp . 'CLIM' = rv . 'CLIM' ;
  931. Digv = 'KOPS' Digv 'CLIM' (rv . 'CLIM') -1;
  932. 'FINSI' ;
  933.  
  934. IDigv= 'INVERSE' digv ;
  935.  
  936. 'SI' ('NON' ('EXISTE' rvp 'DIAGV')) ;
  937. rvp . 'DIAGV' = digv ;
  938. 'FINSI' ;
  939.  
  940. rvp . 'MATC' = 'KMAB' rvp ;
  941. rvp . 'PRESSION' = 'KCHT' rvpd 'SCAL'
  942. 'CENTRE' 0.D0 ;
  943. rvp . 'GRADP' = 'KCHT' rvpd 'VECT'
  944. 'SOMMET' vnul ;
  945.  
  946. achp matpr= 'KOPS' 'MATRIK' ;
  947. rvp . 'MATP' = matpr ;
  948. rv.'rvpd'=rvpd;
  949. rv.'IDigv'=IDigv;
  950. rv.'Digv'=Digv;
  951.  
  952. 'FINSI' ;
  953.  
  954. */3 CALCUL de CMCT pour PROJ
  955. 'SI' (testprj et testp1) ;
  956.  
  957. Diago mma = 'KOPS' 'MATRIK' ;
  958.  
  959. idfdt = 0 ;
  960. 'REPETER' blocj ('DIME' (rv . 'LISTOPER')) ;
  961. nomper = 'EXTRAIRE' &blocj (rv . 'LISTOPER') ;
  962. notable= 'MOT' ('TEXTE' ('CHAINE' &blocj nomper)) ;
  963. *? mess 'Operateur ' nomper ;
  964. si (ega nomper 'DFDT ');
  965. idfdt=idfdt + 1 ;
  966. Diago = Diago et (doma (rv. notable . 'DOMZ') 'XXDIAGSI') ;
  967. rvpd=rv. notable . 'DOMZ';
  968. finsi ;
  969. 'FIN' blocj ;
  970. si (ega idfdt 0) ; mess ' Pas de DFDT ?? ' ; erreur 21 ; finsi ;
  971.  
  972. si ( ega ('VALEUR' 'DIME') 2) ;
  973. Digv= ( exco Diago 'SCAL' cnvi1 ) et ( exco Diago 'SCAL' cnvi2 ) ;
  974. sinon ;
  975. Digv= ( exco Diago 'SCAL' cnvi1 ) et ( exco Diago 'SCAL' cnvi2 ) et
  976. ( exco Diago 'SCAL' cnvi3 ) ;
  977. finsi ;
  978. Digv = kcht rvpd vect sommet comp lc Digv ;
  979. * Matrice diagonale ne contenant pas les conditions aux limites : Diag
  980. Diag = copier Digv;
  981. IDiag = 'INVERSE' Diag ;
  982.  
  983. Digv = 'KOPS' Digv 'CLIM' (rv . 'CLIM') -1;
  984.  
  985. IDigv= 'INVERSE' digv ;
  986.  
  987. 'SI' ('NON' ('EXISTE' rvp 'DIAGV')) ;
  988. rvp . 'DIAGV' = digv ;
  989. 'FINSI' ;
  990.  
  991. rvp.'INCO'=rv.'INCO' ;
  992.  
  993. sp map = 'KOPS' 'MATRIK' ;
  994. sr mar = 'KOPS' 'MATRIK' ;
  995. svnpc mvnpc = 'KOPS' 'MATRIK' ;
  996. 'REPETER' blocpj ('DIME' (rvp . 'LISTOPER')) ;
  997. nomper = 'EXTRAIRE' &blocpj (rvp . 'LISTOPER') ;
  998. notable= 'MOT' ('TEXTE' ('CHAINE' &blocpj nomper)) ;
  999. mess 'Procedure PROJ Operateur : ' nomper ;
  1000.  
  1001. si (EGA nomper 'KBBT');
  1002. rvp . notable . 'KOPT' . 'IKOMP' = 1 ;
  1003. finsi ;
  1004.  
  1005. msi mai=('TEXTE' nomper) (rvp . notable) ;
  1006.  
  1007. *******PROJ*************************************************************
  1008. *******PROJ TGRAD calcul maig (Formulation en Gradient) DEBUT*** *******
  1009. Si TGRAD ;
  1010. mess 'Procedure PROJCT (Gradient) Operateur : ' nomper ;
  1011. rvp . notable . 'KOPT' . 'IKOMP' = 0 ;
  1012. msig maig=('TEXTE' nomper) (rvp . notable) ;
  1013. Finsi ;
  1014. *******PROJ -> MATG FIN*****
  1015. *******PROJ/////////////////////////////////////////////////////////////
  1016.  
  1017. TVNP=FAUX;
  1018. TVNPC=FAUX;
  1019. Si (('EGA' nomper 'VNIMP ') et (non (ega (rvp.'DISCPRES') 5)));
  1020. TVNP=VRAI ;
  1021. mar = mar 'ET' mai ;
  1022. sr = sr 'ET' msi ;
  1023. Finsi ;
  1024.  
  1025. * mess 'nomper=' nomper (rvp.'DISCPRES');
  1026. Si (('EGA' nomper 'VNIMP ') et (ega (rvp.'DISCPRES') 5));
  1027. TVNPC=VRAI;
  1028. mvnpc=mvnpc et mai ;
  1029. svnpc=svnpc et msi ;
  1030. Finsi ;
  1031.  
  1032. Si (non ('EGA' nomper 'VNIMP '));
  1033. map = map 'ET' mai ;
  1034. sp = sp 'ET' msi ;
  1035. Finsi ;
  1036.  
  1037. 'FIN' blocpj ;
  1038.  
  1039. matpc mac = kops 'CMCTSPLT' map ;
  1040. *******PROJ*************************************************************
  1041. *******PROJ TGRAD (vrai Formulation en Gradient) CMCTSPLT DEBUT*** *******
  1042. Si TGRAD ;
  1043. matpcg macg = kops 'CMCTSPLT' maig ;
  1044. Finsi ;
  1045. *******PROJ -> MATG FIN*****
  1046. *******PROJ/////////////////////////////////////////////////////////////
  1047.  
  1048. Si TVNPC; mac=mac et mvnpc; Finsi;
  1049. rvp . 'MATC' = mac ;
  1050.  
  1051. *******PROJ*************************************************************
  1052. *******PROJ TGRAD (vrai Formulation en Gradient) -> MATG DEBUT*** *******
  1053. SI TGRAD ; rvp . 'MATG' = macg; FINSI ;
  1054. *******PROJ -> MATG FIN*****
  1055. *******PROJ/////////////////////////////////////////////////////////////
  1056.  
  1057. scr mcr = 'KOPS' 'MATRIK' ;
  1058. Si TVNP ;
  1059. rvp . 'MBTR' = mar ;
  1060. Dunit=Idigv;
  1061. crt= kops 'CMCT' mac mar (Dunit) ;
  1062. ctr= kops 'CMCT' mar mac (Dunit) ;
  1063. rrt= kops 'CMCT' mar mar (Dunit) ;
  1064. mcr= mcr et crt et ctr et rrt ;
  1065. Finsi ;
  1066. rvp . 'TVNP' = TVNP ;
  1067.  
  1068. Si( ega (rvp.'DISCPRES') 5 ) ;
  1069. mess ' Cas des pressions continues' ;
  1070. matpr = matpc et mcr ;
  1071. Sinon ;
  1072. mess ' Cas des pressions discontinues' ;
  1073.  
  1074. matpr = kops 'CMCT' mac mac IDigv ;
  1075. matpr = matpc et matpr et mcr ;
  1076.  
  1077. Finsi ;
  1078.  
  1079.  
  1080. rvp . 'MATP' = matpr ;
  1081. rv.'rvpd'=rvpd;
  1082. rv.'IDigv'=IDigv;
  1083. rv.'Digv'=Digv;
  1084. 'FINSI' ;
  1085. *************
  1086. ** Fin calcul CMCT pour testp1 et testprj
  1087. ******************************************
  1088. * t
  1089. *************** Calcul de C p Pression
  1090. 'SI' testpr ;
  1091.  
  1092. dt = (rv . 'PASDETPS' . 'DELTAT') '*' (rv . 'ALFA') ;
  1093. rvp . 'DELTAT' = dt ;
  1094. f = 'COPIER' s2 ;
  1095. u = rv . 'INCO' . nomvi ;
  1096.  
  1097. lc = 'EXTRAIRE' digv 'COMP' ;
  1098. fu = 'KCHT' rvpd 'VECT' 'SOMMET'
  1099. 'COMP' lc ('EXCO' f lc) ;
  1100.  
  1101. 'SI' ('EXISTE' rv 'CLIM') ;
  1102. dti = -1.D0 '/' dt ;
  1103. dm1f= 'KOPS' (dt '*' ('KOPS' fu '*' IDigv))
  1104. 'CLIM' (rv . 'CLIM') 3 ;
  1105. dm1f= dti * dm1f ;
  1106. 'SINON' ;
  1107. dm1f= (-1.D0) '*' ('KOPS' fu '*' IDigv) ;
  1108. 'FINSI' ;
  1109.  
  1110. rvp . 'PRESSION' = 'KMF' (rvp . 'MATC') dm1f ;
  1111.  
  1112. 'KRES' rvp (rvp . 'PRESSION')
  1113. 'BETA' (rvp . 'KBETA') (rvp . 'BETA')
  1114. 'PIMP' (rvp . 'KPIMP') (rvp . 'PIMP') ;
  1115. rvp . 'GRADP' = 'KMTP' 1 (rvp . 'MATC')
  1116. (rvp . 'PRESSION') lc ;
  1117. s2 = s2 + (rvp . 'GRADP') ;
  1118. rv.'INCO'.'PRESSION'=rvp . 'PRESSION';
  1119.  
  1120. 'FINSI' ;
  1121.  
  1122. *******PROJ*************************************************************
  1123. *******PROJ MDM1 Ici on calcule M D-1 pour ensuite calculer Ctp DEBUT*** *******
  1124. *******PROJ on ne calcule M D-1 que si (rv 'MDM1') n'existe pas DEBUT*** *******
  1125. *******PROJ ou CALPRE VRAI DEBUT*** *******
  1126. 'SI' testprj ;
  1127.  
  1128. dt = (rv . 'PASDETPS' . 'DELTAT') '*' (rv . 'ALFA') ;
  1129. rvp . 'DELTAT' = dt ;
  1130.  
  1131. ** Produit M D-1
  1132. 'SI' TMDM1 ;
  1133. 'SI' (('EXIST' rv 'MDM1') et (NON CALPRE)) ;
  1134. MDM1=rv.'MDM1' ;
  1135. 'SINON' ;
  1136. mess ' On calcule MD-1 ' ;
  1137. stn matn= 'KOPS' 'MATRIK' ;
  1138.  
  1139. 'REPETER' blocpj1 ('DIME' (rvp . 'LISTOPER')) ;
  1140. nomper1 = 'EXTRAIRE' &blocpj1 (rvp . 'LISTOPER') ;
  1141. notable1= 'MOT' ('TEXTE' ('CHAINE' &blocpj1 nomper1)) ;
  1142. * mess 'Operateur ' nomper1 ;
  1143.  
  1144. si (ega nomper1 'KBBT ');
  1145. nomiv1= extr (rvp . notable1 . 'LISTINCO') 1 ;
  1146.  
  1147. 'REPETER' blocpj2 ('DIME' (rv . 'LISTOPER')) ;
  1148. nomper2 = 'EXTRAIRE' &blocpj2 (rv . 'LISTOPER') ;
  1149. notable2= 'MOT' ('TEXTE' ('CHAINE' &blocpj2 nomper2)) ;
  1150. * mess 'Operateur ' nomper2 ;
  1151.  
  1152. si (ega nomper2 'DFDT ');
  1153. nomiv2= extr (rv . notable2 . 'LISTINCO') 1 ;
  1154. si ('EGA' nomiv2 nomiv1) ;
  1155.  
  1156. domzp=rv . notable2 . 'DOMZ' ;
  1157. msi mai='DFDT' (rv . notable2) ;
  1158. matn = matn et mai ;
  1159. sti = kcht domzp vect sommet comp lc vuni;
  1160. finsi ;
  1161. finsi ;
  1162. 'FIN' blocpj2 ;
  1163. finsi ;
  1164. 'FIN' blocpj1 ;
  1165.  
  1166. MDM1='KMF' matn IDiag ;
  1167.  
  1168. Si(EGA ISCHT 1);
  1169. MDM1=MDM1 * ((dt*2.)/3.) ;
  1170. Sinon ;
  1171. MDM1=MDM1 * dt ;
  1172. Finsi ;
  1173.  
  1174. rv.'MDM1' = MDM1 ;
  1175.  
  1176. *******PROJ MDM1 -> rv.'MDM1' FIN*****
  1177. *******PROJ/////////////////////////////////////////////////////////////
  1178. 'FINSI';
  1179. 'FINSI';
  1180. *******PROJ*************************************************************
  1181. *******PROJ t n-1 DEBUT*** *******
  1182. *******PROJ Calcul de C P DEBUT*** *******
  1183.  
  1184. TVNP=rvp.'TVNP' ;
  1185.  
  1186. 'SI' ('EXIST' (rv.'INCO') 'PRESSION') ;
  1187. PPI = rv.'INCO'.'PRESSION' ;
  1188. 'SI' ('EXIST' (rv.'INCO') 'PNM2') ;
  1189. * TPNM2 elimination of end of step velocity (2 Pn - Pn-1)
  1190. PPI = 2*(PPI) - rv.'INCO'.'PNM2' ;
  1191. 'FINSI' ;
  1192.  
  1193. *Formulation en u grad p
  1194. Si (Exist rvp 'MATG');
  1195. cpre = 'KMF' (rvp . 'MATG') PPI 'TRAN' ;
  1196. *Formulation en p div u
  1197. Sinon;
  1198. cpre = 'KMF' (rvp . 'MATC') PPI 'TRAN' ;
  1199. Finsi ;
  1200.  
  1201. Si TVNP ;
  1202. cxre = 'KMF' (rvp . 'MBTR') PPI 'TRAN' ;
  1203. cpre = cpre et cxre ;
  1204. Finsi ;
  1205.  
  1206. *******PROJ MDM1
  1207. Si TMDM1 ;
  1208. * consistence selon (Gresho)
  1209. gradpres = 'KOPS' MDM1 '*' cpre ;
  1210. Sinon ;
  1211. * consistence selon (Guermond)
  1212. gradpres = cpre ;
  1213. Finsi ;
  1214.  
  1215. oublier cpre ;
  1216. rv.'INCO'.'GRADPRES' = 'NOMC' lcu lc gradpres;
  1217.  
  1218. *Formulation en u grad p
  1219. Si (Exist rvp 'MATG');
  1220. s2 = sf - (rv.'INCO'.'GRADPRES') + st ;
  1221. Sinon ;
  1222. *Formulation en p div u
  1223. s2 = sf + (rv.'INCO'.'GRADPRES') + st ;
  1224. Finsi ;
  1225.  
  1226. 'FINSI' ;
  1227.  
  1228. *******PROJ t n-1 FIN*****
  1229. *******PROJ MDM1 '*' C P -> rv.'INCO'.'GRADPRES' FIN*****
  1230. *******PROJ t n-1 FIN*****
  1231. *******PROJ si (p div u) -> S2 = F + C P + st FIN*****
  1232. *******PROJ t n-1 FIN*****
  1233. *******PROJ si (u grad p) -> S2 = F - C P + st FIN*****
  1234. *******PROJ/////////////////////////////////////////////////////////////
  1235. 'FINSI' ;
  1236.  
  1237. ********** FIN Traitement PRESSION ************************
  1238. * mess ' FIN Traitement PRESSION' ;
  1239.  
  1240. 'SI' ('EXISTE' rv 'CLIM') ;
  1241. s1 = rv . 'CLIM' ;
  1242. 'SINON' ;
  1243. s1=' ' ;
  1244. 'FINSI' ;
  1245. rv . 'S2' = s2 ;
  1246.  
  1247. *******************************************************************
  1248. * Résolution hors QDM méthode de projection
  1249. 'SI'((NON testprj) ou (EGA mdfdt 0));
  1250. *mess '* Résolution hors QDM méthode de projection ';
  1251.  
  1252. * mess ' ====================> calprec '; list calprec ;
  1253. 'SI' rv.'calass' ;
  1254. rv . 'METHINV' . 'MATASS' =ma1 ;
  1255. rv.'calass'=FAUX ;
  1256. 'FINSI' ;
  1257.  
  1258. 'SI' rv.'calprec' ;
  1259. rv . 'METHINV' . 'MAPREC' = ma1 ;
  1260. rv.'calprec'=FAUX ;
  1261. 'FINSI' ;
  1262.  
  1263. rv . 'METHINV' . 'XINIT' = resmn ;
  1264.  
  1265. res = 'KRES' ma1 'TYPI' (rv . 'METHINV')
  1266. 'CLIM' s1
  1267. 'SMBR' s2
  1268. 'IMPR' IMPKRES ;
  1269.  
  1270. 'FINSI' ;
  1271.  
  1272. 'SI' (testprj et (non(EGA mdfdt 0)));
  1273. *******PROJ*************************************************************
  1274. *******PROJ Résolution QDM DEBUT*** *******
  1275. *******PROJ (On éclate les résolutions) DEBUT*** *******
  1276.  
  1277. * Résolution QDM méthode de projection (On éclate les résolutions)
  1278. *mess ' Résolution QDM méthode de projection';
  1279. res mm1= kops 'MATRIK' ;
  1280. liscom=extr s1 'COMP';
  1281. nbcom=dime liscom ;
  1282. * MEss ' NBCOM=' nbcom ;
  1283.  
  1284. Si(NON(EXIST RV 'TABRES')); RV.'TABRES'=TABLE ; Finsi ;
  1285. Si(NON(EGA ('TYPE' RV.'TABRES') 'TABLE')); RV.'TABRES'=TABLE;Finsi;
  1286.  
  1287. repeter Bclcom nbcom ;
  1288. nmc=extr liscom &Bclcom;
  1289. * Mess ' Composante : ' nmc ;
  1290. ma1i=kops 'EXTRCOMP' nmc 'SCAL' ma1;
  1291. s1i = exco s1 nmc 'NOID' ;
  1292. s2i = exco s2 nmc 'NOID' ;
  1293. resmni = exco resmn nmc 'NOID' ;
  1294.  
  1295. MATASSI =chai 'FORMAT' '(A6,I1)' 'MATASS' &Bclcom;
  1296. MAPRECI =chai 'FORMAT' '(A6,I1)' 'MAPREC' &Bclcom;
  1297.  
  1298. 'SI' (rv.'calass' ou (NON ('EXIST' (RV.'TABRES') MATASSI))) ;
  1299. rv . 'TABRES' . MATASSI = ma1i;
  1300. rv.'calass'=FAUX ;
  1301. 'FINSI' ;
  1302.  
  1303. 'SI' (rv.'calprec' ou (NON ('EXIST' (RV.'TABRES') MAPRECI)));
  1304. mess 'On recalcule le preconditionneur ';
  1305. rv . 'TABRES' . MAPRECI = ma1i;
  1306. rv.'calprec'=FAUX ;
  1307. 'FINSI' ;
  1308.  
  1309. rv . 'METHINV' . 'MATASS' = rv . 'TABRES' . MATASSI ;
  1310. rv . 'METHINV' . 'MAPREC' = rv . 'TABRES' . MAPRECI ;
  1311. rv . 'METHINV' . 'XINIT' = resmni ;
  1312.  
  1313.  
  1314. resi = 'KRES' ma1i 'TYPI' (rv . 'METHINV')
  1315. 'CLIM' s1i
  1316. 'SMBR' s2i
  1317. 'IMPR' IMPKRES ;
  1318. resi = nomc resi nmc ;
  1319. res=res et resi ;
  1320. Fin Bclcom ;
  1321. oubli ma1 ;
  1322. *mess ' Fin Résolution QDM méthode de projection';
  1323. * Fin Résolution QDM méthode de projection
  1324. *******PROJ Résolution QDM -> res FIN*****
  1325. *******PROJ (On éclate les résolutions) FIN*****
  1326. *******PROJ/////////////////////////////////////////////////////////////
  1327. 'FINSI' ;
  1328.  
  1329. 'SI' testprj ;
  1330. *******PROJ*************************************************************
  1331. *******PROJ ETAPE DE PROJECTION DEBUT*** *******
  1332. *******PROJ on calcul cun (alias c U tilde) DEBUT*** *******
  1333. * mess 'ETAPE DE PROJECTION ' ;
  1334. * _n
  1335. * C U
  1336. cun = ('KMF' (rvp . 'MATC') res) ;
  1337. Si TVNP ;
  1338. cxn = ('KMF' (rvp . 'MBTR') res) ;
  1339. cun = cun et cxn ;
  1340. Finsi ;
  1341.  
  1342. * mess ' On calcule les seconds membres de l équation de pression ' ;
  1343. * mess ' s ils existent (opérateurs FIMP) ' ;
  1344.  
  1345. 'REPETER' blocpj ('DIME' (rvp . 'LISTOPER')) ;
  1346. nomper = 'EXTRAIRE' &blocpj (rvp . 'LISTOPER') ;
  1347. notable= 'MOT' ('TEXTE' ('CHAINE' &blocpj nomper)) ;
  1348. si (ega nomper 'FIMP ');
  1349. * mess 'Seconds membres de l équation de pression Opérateur ' nomper ;
  1350. msi mai=('TEXTE' nomper) (rvp . notable) ;
  1351. cun = cun et msi ;
  1352. finsi ;
  1353. 'FIN' blocpj ;
  1354.  
  1355. cun = cun * (-1./dt) ;
  1356.  
  1357. * mess ' ====================> calprecp '; list calprecp ;
  1358. 'SI' calassp;
  1359. matass1=matpr ;
  1360. rvp.'matass1'=matass1 ;
  1361. 'FINSI' ;
  1362.  
  1363. 'SI' calprecp ;
  1364. 'SI' (RV.IMPR >EG 1) ;
  1365. 'MESS' ' On preconditionne CMCT ' ;
  1366. 'FINSI' ;
  1367. maprec1 = matpr ;
  1368. rvp.'maprec1'=maprec1 ;
  1369. 'FINSI' ;
  1370. rvp . 'METHINV' . 'MATASS' = matass1 ;
  1371. rvp . 'METHINV' . 'MAPREC' = maprec1 ;
  1372. rvp . 'METHINV' . 'XINIT' = resmn2 ;
  1373.  
  1374. sl= 'KRES' matpr 'TYPI' (rvp . 'METHINV')
  1375. 'CLIM' (rvp . CLIM )
  1376. 'SMBR' cun
  1377. 'IMPR' IMPKRES ; oublier cun ;
  1378.  
  1379. oublier resmn2 ; resmn2 = sl ;
  1380. ctl = 'KMF' (rvp . 'MATC') sl 'TRAN' ;
  1381. Si TVNP ;
  1382. cxl = 'KMF' (rvp . 'MBTR') sl 'TRAN' ;
  1383. ctl = ctl + cxl ;
  1384. Finsi ;
  1385.  
  1386. * elimination of end of step velocity (Si exist PNM2) (on ne corrige pas)
  1387. 'SI'(NON(TPNM2));
  1388. 'SI' (NON ('EXIST' (rv.'INCO') 'PNM2')) ;
  1389. a=nomc lcu lc ('KOPS' IDigv '*' ctl) ;
  1390. res = res + (a*dt) ;
  1391. 'FINSI' ;
  1392. 'FINSI' ;
  1393.  
  1394. oublier ctl ;
  1395.  
  1396. *******PROJ -> (alias c U tilde) FIN*****
  1397. *******PROJ -> sl (alias lambda) FIN*****
  1398. *******PROJ -> on corrige u FIN*****
  1399. *******PROJ/////////////////////////////////////////////////////////////
  1400. 'FINSI' ;
  1401.  
  1402. ***** Avancement en temps
  1403. *? Si (testprj et ('EGA' mdfdt 0)) ; IMPTCRR=RV.'IMPR' ; finsi ;
  1404. Si ('EGA' mdfdt 0) ; IMPTCRR=RV.'IMPR' ; finsi ;
  1405. IMPKRES=0 ;
  1406. * mess 'On passe dans TCRR ' ;
  1407. eps = 'TCRR' res omeg (rv . 'INCO') 'IMPR' IMPTCRR ;
  1408.  
  1409. 'OUBLIER' resmn ;
  1410. resmn = res ;
  1411. 'MENAGE' ;
  1412. 'FIN' bloci ;
  1413. irt=0 ;
  1414.  
  1415. * mess ' ITMA= ' (rv . 'ITMA') ' mdfdt= ' mdfdt ;
  1416. 'SI' ('EGA' (rv . 'ITMA') 0) ;
  1417. * mess ' ON PASSE PLUS DS TCNM>>>>>>>>>>>>>>' ;
  1418. irt = 'TCNM' rv 'NOUP';
  1419. 'SINON' ;
  1420. * mess ' ON PASSE DS TCNM>>>>' (rv . 'ITMA') mdfdt;
  1421. irt = 'TCNM' rv ;
  1422. 'FINSI' ;
  1423.  
  1424. ***** Avancement en temps algorithme de projection
  1425.  
  1426. 'SI' (testprj) ;
  1427. 'SI' calprecp;
  1428. calprecp= FAUX ;
  1429. 'SINON' ;
  1430. 'SI' ('NON' calassp) ;
  1431. 'OUBLIER' matpr ;
  1432. 'FINSI' ;
  1433. 'FINSI' ;
  1434. calassp=FAUX ;
  1435. rvp.'calassp'=calassp ;
  1436. rvp.'calprecp'=calprecp ;
  1437. 'FINSI' ;
  1438.  
  1439. *******PROJ*************************************************************
  1440. *******PROJ P(n+1) = P(n) + sl DEBUT*** *******
  1441. * Algorithme de projection P(n+1) = P(n) + sl
  1442. 'SI' testprj ;
  1443.  
  1444. 'SI' (NON ('EXIST' (rv.'INCO') 'PRESSION'));
  1445. rv.'INCO'.'PRESSION' = sl;
  1446. Si TPNM2 ; rv.'INCO'.'PNM2' = sl ; Finsi ;
  1447. 'SINON' ;
  1448. PNM1=rv.'INCO'.'PRESSION';
  1449. si ( EGA ISCHT 1) ;
  1450. PN=PNM1 + (1.5*sl) ;
  1451. sinon ;
  1452. PN=PNM1 + sl ;
  1453. finsi ;
  1454.  
  1455. Si TPNM2 ; rv.'INCO'.'PNM2'=PNM1 ; Finsi ;
  1456. rv.'INCO'.'PRESSION'=PN ;
  1457. 'FINSI' ;
  1458.  
  1459. Si (EGA TYPROJ 'PSCT') ;
  1460. rv.'INCO'.'PRESSION' = sl;
  1461. Finsi ;
  1462.  
  1463. 'OUBLIER' sl ;
  1464. 'FINSI' ;
  1465. *******PROJ P(n+1) = P(n) + sl FIN*****
  1466. *******PROJ/////////////////////////////////////////////////////////////
  1467. ***** Avancement en temps FIN
  1468.  
  1469.  
  1470. 'SI' testran ;
  1471. rv . 'CO' . 'VITESSE' ='KOPS' (rv . 'INCO' . nomvi)
  1472. '-' (rv . 'SEDIM') ;
  1473. k = 'ABS' (rv . 'INCO' . 'KN') ;
  1474. e = 'ABS' (rv . 'INCO' . 'EN') ;
  1475. k = 'KOPS' ('KOPS' k '*' k) '/' e ;
  1476. dif = 'KOPS' ('KOPS' k '*' 0.09) '+' (rv . 'COEF') ;
  1477. rv . 'CO' . 'DIFFU' = 'NOEL' rvpd dif ;
  1478. rv . 'CO' . 'TEMPERA' = rv . 'INCO' . 'CN' ;
  1479. 'FINSI' ;
  1480. 'MENAGE' ;
  1481.  
  1482. 'SI' ('EGA' irt 1) ;
  1483. 'MESSAGE' ' Temps final atteint : '
  1484. (rv . 'PASDETPS' . 'TPS') ;
  1485. 'QUITTER' bloc1 ;
  1486. 'FINSI' ;
  1487. 'FIN' bloc1 ;
  1488.  
  1489. 'SI' testpr ;
  1490. rvp . 'PRESSION' = 'KCHT' rvpd 'SCAL' 'CENTRE'
  1491. (rvp . 'PRESSION') ;
  1492. rvp . 'PN' = 'ELNO' rvpd
  1493. (rvp . 'PRESSION') ;
  1494. 'FINSI' ;
  1495. ************************ E X E C ************************************
  1496. 'FINPROC' ;
  1497.  
  1498.  
  1499. GRAPH = faux ;
  1500. COMPLET = FAUX ;
  1501. SI ( COMPLET ) ;
  1502. DIAM=2. ;
  1503. SINON ;
  1504. DIAM=0.5 ;
  1505. FINSI ;
  1506.  
  1507. 'OPTI' 'DIME' 2 'ELEM' 'QUA4' ;
  1508. 'OPTI' 'ISOV' 'SULI' ;
  1509. 'OPTI' 'ECHO' 1 'TRACER' 'PSC' ;
  1510. *
  1511. *=========
  1512. * MAILLAGE
  1513. *=========
  1514. *
  1515. *
  1516. *- Création des points supports des DROITES
  1517. *
  1518. L = 2.D0 ; LS2 = L / 2.D0 ;
  1519. H = L ; HS2 = H / 2.D0 ;
  1520. X0 = -1.D0 * LS2 ; X1 = X0 + L ;
  1521. Y0 = -1.D0 * HS2 ; Y1 = Y0 + H ;
  1522. INUMX = 20 ;
  1523. INUMY = INUMX ;
  1524. XNUMY = 'FLOT' INUMX ;
  1525. INUX1 = INUMX - 1 ;
  1526. INUY1 = INUMY - 1 ;
  1527. X01 = X0 + X1 * 0.5D0 ;
  1528. Y01 = Y0 + Y1 * 0.5D0 ;
  1529. DX = X1 - X0 / INUMX ;
  1530. DY = Y1 - Y0 / INUMY ;
  1531. DX1 = DX / 2.D0 ;
  1532. DY1 = DY / 2.D0 ;
  1533. *
  1534. B1 = X0 Y0 ;
  1535. B3 = X1 Y0 ;
  1536. H1 = X0 Y1 ;
  1537. H3 = X1 Y1 ;
  1538. *
  1539. *
  1540. *- Création des DROITES frontieres
  1541. *
  1542. DRBAS = B1 'DROI' INUMX B3 ;
  1543. DRDRO = B3 'DROI' INUMY H3 ;
  1544. DRHAU = H3 'DROI' INUMX H1 ;
  1545. DRGAU = H1 'DROI' INUMY B1 ;
  1546. DRCOT = DRBAS 'ET' DRDRO 'ET' DRGAU 'ET' DRHAU ;
  1547. PELIM = DX1 / (5.D0 * INUMX) ;
  1548. *
  1549. *- Creation maillage GEOMETRIQUE
  1550. *
  1551. PTOT1 = 'DALL' DRBAS DRDRO DRHAU DRGAU ;
  1552. *
  1553. *- Creation maillage HYBRIDE y compris sous-objets (cond. limites)
  1554. *
  1555. PTOTC = CHAN PTOT1 QUAF ;
  1556. HYTOT = 'MODE' PTOTC 'NAVIER_STOKES' LINE ;
  1557. list HYTOT ;
  1558. XVOL= DOMA HYTOT 'VOLUME' ;
  1559. DOMA HYTOT 'IMPR' ;
  1560. *opti donn 5 ;
  1561. *
  1562. *
  1563. *- Coordonnées des points par classe de points
  1564. *
  1565. XS YS = 'COOR' ( DOMA HYTOT 'MAILLAGE') ;
  1566. *
  1567. * XCEN : Abscisse du sommet du cone
  1568. * YCEN : Ordonnée du sommet du cone
  1569. * RCEN : Rayon du cone
  1570. *
  1571. XCEN = 0.D0 ;
  1572. YCEN =-0.5D0 ;
  1573. RCEN = 3.0D0 * DX ;
  1574.  
  1575. *================
  1576. * INITIALISATIONS
  1577. *================
  1578. *
  1579. * ------------------------
  1580. * = Conditions initiales =
  1581. * ------------------------
  1582. * h(x,y) = f(r)
  1583. * avec f(r) = max( h(1.-r/rcen) , 0.)
  1584. * On se sert des égalités suivantes :
  1585. * m = min(f,g) = (f+g - abs(f-g)) / 2
  1586. * M = max(f,g) = (f+g + abs(f-g)) / 2
  1587. *
  1588. HAUT = 1.D0 ;
  1589. *
  1590. *- Charge aux sommets
  1591. *
  1592. CRS1 = (XS-XCEN)*(XS-XCEN) + ((YS-YCEN)*(YS-YCEN)) ** 0.5D0 ;
  1593. CRS2 = 1.D0 - (CRS1 / RCEN) * HAUT ;
  1594. CRS3 = 'ABS' CRS2 ;
  1595. CRS4 = CRS2 + CRS3 / 2.D0 ;
  1596. SI ( COMPLET ) ;
  1597. daxh=drbas plus (0. 0.5) ;
  1598. daxv=drgau plus (1. 0.) ;
  1599. elim (daxh et daxv et ptot1) 1.e-5 ;
  1600. SINON ;
  1601. daxh=drbas plus (0. 1.) ;
  1602. daxv=drgau plus (0.5 0.) ;
  1603. elim (daxh et daxv et ptot1) 1.e-5 ;
  1604. FINSI ;
  1605. *
  1606. *- Vitesses aux sommets
  1607. *
  1608. SPEEX = 'NOMC' 'UX' YS 'NATU' 'DISCRET' ;
  1609. SPEEY = 'NOMC' 'UY' XS 'NATU' 'DISCRET' ;
  1610. SPEEY = (-1.D0) * SPEEY ;
  1611.  
  1612. TN = KCHT HYTOT SCAL SOMMET CRS4 ;
  1613. evolth=evol 'CHPO' TN daxh ;
  1614. evoltv=evol 'CHPO' TN daxv ;
  1615. s2c= SOMT ((NOEL HYTOT TN)*XVOL) ;
  1616. mess ' Solution exacte projetée ' s2c ;
  1617.  
  1618. CFL=1. ;
  1619. OPDFDT='BDF2';
  1620. OPKONV='CENTREE';
  1621.  
  1622.  
  1623. DEBPROC TEST ;
  1624. ARGU OPDFDT*MOT OPKONV*MOT CFL*FLOTTANT
  1625. DIAM*FLOTTANT GRAPH*LOGIQUE ;
  1626.  
  1627. DT=CFL*0.1 ;
  1628. NBIT=enti (3.146 * DIAM / DT) + 1 ;
  1629.  
  1630. coef = 1.e-20 ;
  1631. TNM2=TEXT ' ' ;
  1632. Si('EGA' OPDFDT 'BDF2'); TNM2 = CHAI 'TN2' ;
  1633. Finsi ;
  1634.  
  1635.  
  1636. RV = 'EQEX' 'EQUA' 'RIGIDITE' 'T' HYTOT 'TEMPERAT'
  1637. 'TRAN' DT OPDFDT 'TN' TNM2
  1638. ITMA 1 'FIDT' 1 'DTI' 0.
  1639. *'OPTI' OPKONV
  1640. 'OPTI' 'CENTREE'
  1641. 'ZONE' HYTOT 'OPER' 'TSCA' 1. COEF 'UN' 0. 'INCO' 'T'
  1642. 'CLIM' 'T' 'TIMP' DRCOT 0. ;
  1643.  
  1644.  
  1645. RV.'INCO' = TABLE 'INCO' ;
  1646. RV.'INCO'.'TN' = KCHT HYTOT SCAL SOMMET CRS4 ;
  1647. RV.'INCO'.'TN2' = KCHT HYTOT SCAL SOMMET CRS4 ;
  1648. RV.'INCO'.'T0' = KCHT HYTOT SCAL SOMMET 0. ;
  1649. RV.'INCO'.'UN' = KCHT HYTOT VECT SOMMET SPEEX SPEEY ;
  1650.  
  1651. u = vect RV.'INCO'.'UN' 1. ux uy jaune ;
  1652. *trac u ptot1;
  1653. *trac RV.'INCO'.'TN' ptot1;
  1654.  
  1655. rv.'OMEGA'= 1. ;
  1656. rv.'NITER'=1 ;
  1657. IMPTCRR=0 ;
  1658.  
  1659. repeter bloct nbit ;
  1660. exec rv ;
  1661.  
  1662. fin bloct ;
  1663.  
  1664.  
  1665. maxc=maxi (RV.'INCO'.'TN') ; minc=mini (RV.'INCO'.'TN');
  1666. mess 'MAXC=' maxc 'MINC=' minc ;
  1667. rv.'MAXC'=maxc;rv.'MINC'=minc;
  1668. TN=(RV.'INCO'.'TN') ;
  1669. TN=KCHT HYTOT SCAL SOMMET TN ;
  1670. s2c= SOMT ((NOEL HYTOT TN)*XVOL) ;
  1671. mess ' S2C= ' s2c ;
  1672. rv.'S2C'=s2c ;
  1673.  
  1674. Si (COMPLET) ;
  1675. titg = 'CHAINE' 'SOLUTION APRES UNE ROTATION : ' OPKONV ' CFL=' CFL
  1676. ' ' OPDFDT ;
  1677. Sinon ;
  1678. titg = 'CHAINE' 'SOLUTION APRES 1/4 de TOUR : ' OPKONV ' CFL=' CFL
  1679. ' ' OPDFDT ;
  1680. Finsi ;
  1681.  
  1682. SI GRAPH;
  1683. P1 = 'PROG' -5. -5. 2. ;
  1684. MONTAGNE (RV.'INCO'.'TN') ptot1 2. P1 'TITRE' titg 'CACHE' ;
  1685. 'TRACER' RV.'INCO'.'TN' ptot1 ('PROG' -0.1 'PAS' 0.1 0.9) drcot
  1686. 'NCLK';
  1687. FINSI ;
  1688. FINPROC RV ;
  1689.  
  1690. *
  1691. * CALCUL
  1692. *
  1693.  
  1694. * SCHEMA BDF2
  1695.  
  1696. CFL=1. ;
  1697. OPDFDT='BDF2';
  1698. *OPDFDT='CN ';
  1699. OPKONV='CENTREE' ;
  1700. rv = TEST OPDFDT OPKONV CFL DIAM GRAPH ;
  1701. evolh=evol 'CHPO' (RV.'INCO'.'TN') daxh ;
  1702. evolv=evol 'CHPO' (RV.'INCO'.'TN') daxv ;
  1703. evolth=evolth et evolh ;
  1704. evoltv=evoltv et evolv ;
  1705.  
  1706. Si (non complet) ;
  1707. maxc=rv.'MAXC';minc=rv.'MINC';s2c=rv.'S2C';
  1708. ermx=abs(maxc - .77666) ;
  1709. ermi=abs(minc + 8.42722E-02) ;
  1710. ers2=abs(s2c - 9.45053E-02) ;
  1711. mess 'ermx=' ermx 'ermi=' ermi 'ers2=' ers2 ;
  1712. *si ( ermx > 1.e-5) ; erreur 5 ; finsi ;
  1713. *si ( ermi > 1.e-5) ; erreur 5 ; finsi ;
  1714. *si ( ers2 > 1.e-5) ; erreur 5 ; finsi ;
  1715. Finsi ;
  1716.  
  1717. * SCHEMA TENSEUR VISQUEUX (TV)
  1718.  
  1719. CFL=0.5 ;
  1720. OPDFDT='TVISQ';
  1721. OPKONV='CENTREE' ;
  1722. rv = TEST OPDFDT OPKONV CFL DIAM GRAPH ;
  1723. evolh=evol 'CHPO' (RV.'INCO'.'TN') daxh ;
  1724. evolv=evol 'CHPO' (RV.'INCO'.'TN') daxv ;
  1725. evolth=evolth et evolh ;
  1726. evoltv=evoltv et evolv ;
  1727.  
  1728. Si (non complet) ;
  1729. maxc=rv.'MAXC';minc=rv.'MINC';s2c=rv.'S2C';
  1730. ermx=abs(maxc - .89551) ;
  1731. ermi=abs(minc + 7.35586E-02) ;
  1732. ers2=abs(s2c - 9.44207E-02) ;
  1733. mess 'ermx=' ermx 'ermi=' ermi 'ers2=' ers2 ;
  1734. *si ( ermx > 1.e-5) ; erreur 5 ; finsi ;
  1735. *si ( ermi > 1.e-5) ; erreur 5 ; finsi ;
  1736. *si ( ers2 > 1.e-5) ; erreur 5 ; finsi ;
  1737. Finsi ;
  1738.  
  1739.  
  1740. * SCHEMA CRANK-NICOLSON GENERALISE (CNG)
  1741.  
  1742. CFL=1. ;
  1743. OPDFDT='CNG ';
  1744. OPKONV='CENTREE' ;
  1745. rv = TEST OPDFDT OPKONV CFL DIAM GRAPH ;
  1746. evolh=evol 'CHPO' (RV.'INCO'.'TN') daxh ;
  1747. evolv=evol 'CHPO' (RV.'INCO'.'TN') daxv ;
  1748. evolth=evolth et evolh ;
  1749. evoltv=evoltv et evolv ;
  1750.  
  1751. Si (non complet) ;
  1752. maxc=rv.'MAXC';minc=rv.'MINC';s2c=rv.'S2C';
  1753. ermx=abs(maxc - .86695) ;
  1754. ermi=abs(minc + 9.92463E-02) ;
  1755. ers2=abs(s2c - 9.44039E-02) ;
  1756. mess 'ermx=' ermx 'ermi=' ermi 'ers2=' ers2 ;
  1757. *si ( ermx > 1.e-5) ; erreur 5 ; finsi ;
  1758. *si ( ermi > 1.e-5) ; erreur 5 ; finsi ;
  1759. *si ( ers2 > 1.e-5) ; erreur 5 ; finsi ;
  1760. Finsi ;
  1761.  
  1762.  
  1763. * SCHEMA CRANK-NICOLSON GALERKIN (CN)
  1764.  
  1765. CFL=1. ;
  1766. OPDFDT='CN ' ;
  1767. OPKONV='CENTREE' ;
  1768. rv = TEST OPDFDT OPKONV CFL DIAM GRAPH ;
  1769. evolh=evol 'CHPO' (RV.'INCO'.'TN') daxh ;
  1770. evolv=evol 'CHPO' (RV.'INCO'.'TN') daxv ;
  1771. evolth=evolth et evolh ;
  1772. evoltv=evoltv et evolv ;
  1773.  
  1774. Si (non complet) ;
  1775. maxc=rv.'MAXC';minc=rv.'MINC';s2c=rv.'S2C';
  1776. ermx=abs(maxc - .90086) ;
  1777. ermi=abs(minc + 7.24436E-02) ;
  1778. ers2=abs(s2c - 9.42804E-02) ;
  1779. mess 'ermx=' ermx 'ermi=' ermi 'ers2=' ers2 ;
  1780. *si ( ermx > 1.e-5) ; erreur 5 ; finsi ;
  1781. *si ( ermi > 1.e-5) ; erreur 5 ; finsi ;
  1782. *si ( ers2 > 1.e-5) ; erreur 5 ; finsi ;
  1783. Finsi ;
  1784.  
  1785.  
  1786. * SCHEMA EULER IMPLICITE PETROV-GALERKIN (IMPL)
  1787.  
  1788. CFL=1. ;
  1789. OPDFDT='EUL_IMPL' ;
  1790. OPKONV='CENTREE' ;
  1791. rv = TEST OPDFDT OPKONV CFL DIAM GRAPH ;
  1792. evolh=evol 'CHPO' (RV.'INCO'.'TN') daxh ;
  1793. evolv=evol 'CHPO' (RV.'INCO'.'TN') daxv ;
  1794. evolth=evolth et evolh ;
  1795. evoltv=evoltv et evolv ;
  1796.  
  1797. Si (non complet) ;
  1798. maxc=rv.'MAXC';minc=rv.'MINC';s2c=rv.'S2C';
  1799. ermx=abs(maxc - .51760) ;
  1800. ermi=abs(minc + 1.97473E-02) ;
  1801. ers2=abs(s2c - 9.42794E-02) ;
  1802. mess 'ermx=' ermx 'ermi=' ermi 'ers2=' ers2 ;
  1803. *si ( ermx > 1.e-5) ; erreur 5 ; finsi ;
  1804. *si ( ermi > 1.e-5) ; erreur 5 ; finsi ;
  1805. *si ( ers2 > 1.e-5) ; erreur 5 ; finsi ;
  1806. Finsi ;
  1807.  
  1808.  
  1809.  
  1810. si GRAPH;
  1811. titre 'Coupe ox à y=1/2 ' ;
  1812. TAB1=TABLE;
  1813. TAB1.'TITRE'=TABLE ;
  1814. TAB1.1='TIRR MARQ CROI REGU';
  1815. TAB1.'TITRE' . 1 = mot 'T initial ' ;
  1816. TAB1.2='MARQ ETOI REGU';
  1817. TAB1.'TITRE' . 2 = mot 'BDF2 CFL 1. ';
  1818. TAB1.3='MARQ CROI REGU ';
  1819. TAB1.'TITRE' . 3 = mot 'TV CFL 0.1';
  1820. TAB1.4='MARQ LOSA REGU ';
  1821. TAB1.'TITRE' . 4 = mot 'CNG CFL 1.' ;
  1822. TAB1.5='MARQ CARR REGU ';
  1823. TAB1.'TITRE' . 5 = mot 'CN CFL 1.' ;
  1824. TAB1.6='MARQ PLUS REGU ';
  1825. TAB1.'TITRE' . 6 = mot 'IMPL CFL 1.' ;
  1826. DESS EVOLTH 'TITX' 'Ox' LEGE TAB1 ;
  1827. titre 'Coupe oy à x=0 ' ;
  1828. DESS EVOLTV 'TITX' 'Oy' LEGE TAB1 ;
  1829. FINSI ;
  1830.  
  1831. FIN ;
  1832.  
  1833.  
  1834.  
  1835.  
  1836.  
  1837.  
  1838.  
  1839.  
  1840.  
  1841.  
  1842.  
  1843.  
  1844.  
  1845.  
  1846.  
  1847.  
  1848.  
  1849.  
  1850.  
  1851.  
  1852.  

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