Télécharger deduadap.procedur

Retour à la liste

Numérotation des lignes :

  1. * DEDUADAP PROCEDUR GOUNAND 24/09/18 21:15:02 12010
  2. ************************************************************************
  3. * NOM : DEDUADAP
  4. *
  5. * Opérateur DEDU option ADAP
  6. * --------------------------
  7. * CHPO2 = 'DEDU' 'ADAP' MAIL (CHAM1) (RIG1 (CHPO1)) ;
  8. *
  9. * Objet :
  10. * _______
  11. *
  12. * Génère un champ de déplacement permettant de régulariser un
  13. * maillage ou de l'adapter suivant une métrique sans changer
  14. * sa topologie.
  15. *
  16. * Commentaire :
  17. * _____________
  18. *
  19. * MAIL : maillage à régulariser ou adapter
  20. *
  21. * CHAM1 : champ par élément aux noeuds donnant une métrique :
  22. * tenseur symétrique de composantes G11,G22,G12,...
  23. * (par défaut, le tenseur unité)
  24. *
  25. * RIG1 : Conditions sur les déplacements
  26. * CHPO1 (par défaut, on bloque les noeuds frontières de MAIL)
  27. *
  28. * CHPO2 : champ de déplacement.
  29. *
  30. * Notes :
  31. * _______
  32. *
  33. * L'option 'ADAP' est censée fonctionner sans conditions sur le
  34. * maillage.
  35. *
  36. * Référence principale :
  37. * ______________________
  38. *
  39. *@Article{huang4,
  40. * author = {Weizhang Huang},
  41. * title = {Variational Mesh Adaptation:
  42. * Isotropy and Equidistribution},
  43. * journal = {JCP},
  44. * year = {2001},
  45. * volume = {174},
  46. * pages = {903-924},
  47. * endroit = {Classeur Mesh Movement (VIIIb)}
  48. *}
  49. *
  50. * Je dois faire également un rapport technique...
  51. *
  52. *
  53. *
  54. * LANGAGE : GIBIANE-CAST3M
  55. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  56. * mél : gounand@semt2.smts.cea.fr
  57. **********************************************************************
  58. * VERSION : v1, 05/04/2006, version initiale
  59. * HISTORIQUE : v1, 05/04/2006, création
  60. * HISTORIQUE :
  61. * HISTORIQUE :
  62. ************************************************************************
  63. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  64. * en cas de modification de ce sous-programme afin de faciliter
  65. * la maintenance !
  66. ************************************************************************
  67. *
  68. *
  69. 'DEBPROC' DEDUADAP ;
  70. *
  71. * Lecture des arguments
  72. *
  73. 'ARGUMENT' mail*'MAILLAGE' ;
  74. *
  75. 'ARGUMENT' rblo/'RIGIDITE' ;
  76. lrb = 'EXISTE' rblo ;
  77. 'SI' lrb ;
  78. 'ARGUMENT' cblo/'CHPOINT' ;
  79. lcb = 'EXISTE' cblo ;
  80. 'SINON' ;
  81. lcb = FAUX ;
  82. 'FINSI' ;
  83. *
  84. lmotcle = 'MOTS' 'METR' 'DISG' 'THET' 'GAMM' 'NITM' 'ACVG' 'METG'
  85. 'IDIR' 'TINV' 'DENS' ;
  86. lchad = FAUX ; lchp = FAUX ;
  87. ldisg = FAUX ;
  88. theta = 0.2D0 ;
  89. gamma = 2.D0 ;
  90. *theta = 0.2D0 ;
  91. *gamma = 2.D0 ;
  92. itmax = 40 ;
  93. acccvg = VRAI ;
  94. lmg = FAUX ;
  95. lidir = FAUX ;
  96. ltinv = FAUX ;
  97. *
  98. 'REPETER' imotcle ;
  99. 'ARGUMENT' motcle/'MOT' ;
  100. 'SI' ('NON' ('EXISTE' motcle)) ;
  101. 'QUITTER' imotcle ;
  102. 'FINSI' ;
  103. lmc = 'EXISTE' lmotcle motcle ;
  104. 'SI' ('NON' lmc) ;
  105. *1052 2
  106. *Mot-cle incorrect "%M1:4". Voici la liste des valeurs admises : %M5:40
  107. 'ERRE' 1052 'AVEC' ('CHAI' motcle
  108. 'METR DISG THET GAMM NITM ACVG METG IDIR TINV') ;
  109. 'FINSI' ;
  110. *
  111. 'SI' ('EGA' motcle 'METR') ;
  112. 'ARGUMENT' chad/'MCHAML' ;
  113. lchad = 'EXISTE' chad ;
  114. 'SI' ('NON' lchad) ;
  115. 'ARGUMENT' chp/'CHPOINT' ;
  116. lchp = 'EXISTE' chp ;
  117. 'SI' lchp ;
  118. 'ARGUMENT' metdisc/'MOT' ;
  119. 'FINS' ;
  120. lmetdisc = 'EXIS' metdisc ;
  121. 'SINON' ;
  122. argu kmodl1*'MMODEL' ;
  123. lchp = FAUX ;
  124. 'FINSI' ;
  125. 'SINON' ;
  126. 'SI' ('EGA' motcle 'DENS') ;
  127. 'ARGUMENT' chp*'CHPOINT' ;
  128. chp = 'REDU' chp mail ;
  129. kmodl1 = 'MODE' mail 'THERMIQUE' ;
  130. chad = 'CHAN' 'CHAM' kmodl1 chp ;
  131. chad = (chad ** -2) 'NOMC' 'G11' ;
  132. 'SI' (('VALE' DIME) '>' 1) ;
  133. chad0 = 0.*chad ;
  134. chad = chad 'ET' (chad 'NOMC' 'G22') 'ET' (chad0 'NOMC' 'G21') ;
  135. 'FINS' ;
  136. 'SI' (('VALE' DIME) '>' 2) ;
  137. chad = chad 'ET' (chad 'NOMC' 'G33') 'ET' (chad0 'NOMC' 'G31') 'ET' (chad0 'NOMC' 'G32') ;
  138. 'FINS' ;
  139. lchad = VRAI ;
  140. lchp = FAUX ;
  141. 'FINSI' ;
  142. 'FINSI' ;
  143. *
  144. 'SI' ('EGA' motcle 'DISG') ;
  145. 'ARGUMENT' gdisc*'MOT' ;
  146. ldisg = VRAI ;
  147. 'FINSI' ;
  148. *
  149. vprec = ('VALE' 'PREC') '**' 0.75 ;
  150. mvprec = '*' vprec -1. ;
  151. 'SI' ('EGA' motcle 'THET') ;
  152. 'ARGUMENT' theta*'FLOTTANT' ;
  153. lok = 'ET' ('>' theta mvprec) ('<' theta ('+' 1. vprec)) ;
  154. 'SI' ('NON' lok) ;
  155. * 42 2 %m1:8 = %r1 non compris entre %r2 et %r3
  156. 'ERRE' 42 'AVEC' 'FLOT1' ('PROG' theta 0. 1.) ;
  157. 'FINSI' ;
  158. 'FINSI' ;
  159. *
  160. 'SI' ('EGA' motcle 'GAMM') ;
  161. 'ARGUMENT' gamma*'FLOTTANT' ;
  162. lok = ('>' gamma ('-' 1.D0 vprec)) ;
  163. 'SI' ('NON' lok) ;
  164. * 41 2 %m1:8 = %r1 inferieur a %r2
  165. 'ERRE' 41 'AVEC' 'FLOT2' ('PROG' gamma 1.) ;
  166. 'FINSI' ;
  167. 'FINSI' ;
  168. *
  169. 'SI' ('EGA' motcle 'NITM') ;
  170. 'ARGUMENT' itmax*'ENTIER' ;
  171. lok = ('>' itmax 0) ;
  172. 'SI' ('NON' lok) ;
  173. * 41 2 %m1:8 = %r1 inferieur a %r2
  174. 'ERRE' 41 'AVEC' 'ENTI1' ('PROG' itmax 1.) ;
  175. 'FINSI' ;
  176. 'FINSI' ;
  177. *
  178. 'SI' ('EGA' motcle 'ACVG') ;
  179. 'ARGUMENT' acccvg*'LOGIQUE' ;
  180. 'FINSI' ;
  181. *
  182. 'SI' ('EGA' motcle 'METG') ;
  183. 'ARGUMENT' methgau*'MOT' ;
  184. lmg = VRAI ;
  185. 'FINSI' ;
  186. *
  187. 'SI' ('EGA' motcle 'IDIR') ;
  188. 'ARGUMENT' idir*'ENTIER' ;
  189. lidir = VRAI ;
  190. 'FINSI' ;
  191. *
  192. 'SI' ('EGA' motcle 'TINV') ;
  193. 'ARGUMENT' tinv*'TABLE' ;
  194. ltinv = VRAI ;
  195. 'FINSI' ;
  196. *
  197. 'FIN' imotcle ;
  198. ladap = 'OU' lchad lchp ;
  199. *
  200. 'ARGUMENT' debug/'LOGIQUE' ;
  201. 'SI' ('NON' ('EXISTE' debug)) ;
  202. debug = FAUX ;
  203. 'FINSI' ;
  204. *
  205. * Initialisations
  206. *
  207. idim = 'VALEUR' 'DIME' ;
  208. imod = 'VALEUR' 'MODE' ;
  209. vdim = DEADUTIL 'DIMM' mail ;
  210. vtyp = DEADUTIL 'TYPM' mail ;
  211. laxi = DEADUTIL 'AXI?' ;
  212. lsph = DEADUTIL 'SPH?' ;
  213. *
  214. 'SI' ('OU' ('<' idim 1) ('>' idim 3)) ;
  215. * 709 2 Fonction indisponible en dimension %i1.
  216. 'ERREUR' 709 'AVEC' idim ;
  217. 'FINSI' ;
  218. 'SI' (('EGA' imod 'AXIS') 'OU' ('EGA' imod 'UNIDAXIS') 'OU'
  219. ('EGA' imod 'FOUR') 'OU' ('EGA' imod 'SPHE')) ;
  220. *-105 0 Mode de calcul actuel %m1:32
  221. 'ERRE' -105 'AVEC' imod ;
  222. * 710 2 Fonction indisponible pour ce mode de calcul
  223. 'ERRE' 710 ;
  224. 'FINSI' ;
  225. *
  226. vquaf = ('EGA' vtyp 'QUAF') ;
  227. 'SI' ('ET' ldisg ('NON' vquaf)) ;
  228. 'MESS' 'DISG option :' ;
  229. * 66 2 L'objet %m1:8 doit etre de type %m9:16
  230. 'ERRE' 66 'AVEC' 'MAIL QUAF' ;
  231. 'FINSI' ;
  232. *'SI' ('ET' lchp ('NON' vquaf)) ;
  233. * 'MESS' 'METR+CHPO option :' ;
  234. ** 66 2 L'objet %m1:8 doit etre de type %m9:16
  235. * 'ERRE' 66 'AVEC' 'MAIL QUAF' ;
  236. *'FINSI' ;
  237. *
  238. * Paramètres du solveur non-linéaire
  239. *
  240. * Evaluation de la matrice tangente
  241. * iktan = 1 : Matrice tangente exact (chère)
  242. * iktan = 2 : " approchée 1 (on néglige les termes extradiagonaux
  243. * (UX,FY)...)
  244. * (par défaut)
  245. * iktan = 3 : " approchée 2 (on néglige en plus les dérivées
  246. * extradiagonales (ddxi, ddeta))
  247. * (ne fonctionne pas)
  248. *
  249. * Accélération de convergence
  250. * acccvg = VRAI : accélération à la PV
  251. *
  252. * Période de recalcul de la matrice tangente
  253. * rktan = i (toutes les i itérations non-linéaires)
  254. *
  255. * itmax : Nombre maxi d'itérations
  256. * rfonc : critère d'arrêt sur la variation de la fonctionnelle
  257. * fback : facteur divisif pour la relaxation lors d'un backtracking
  258. * nback : nombre maxi de backtracking
  259. * fvdet : critère pour le backtracking, variation maxi de la valeur
  260. * du jacobien
  261.  
  262. iktan = 2 ;
  263. *!!!iktan = 1 ;
  264. rktan = 1 ;
  265. 'SI' debug ;
  266. rfonc = 5.D-8 ;
  267. 'SINON' ;
  268. rfonc = 5.D-2 ;
  269. 'FINSI' ;
  270. fback = 2.D0 ; fvdet = 4.D0 ;
  271. nback = 10 ; damp = 1.0D0 ;
  272. *
  273. * Maillage
  274. *
  275. 'SI' vquaf ;
  276. _mt = mail ;
  277. 'SINON' ;
  278. _mt = 'CHANGER' mail 'QUAF' ;
  279. 'FINSI' ;
  280. *
  281. * Inconnus et discrétisation
  282. *
  283. 'SI' ('NON' lmg) ;
  284. 'SI' ('EGA' vtyp 'LINE') ;
  285. methgau = 'GAR1' ;
  286. 'SINON' ;
  287. methgau = 'GAR2' ;
  288. 'FINSI' ;
  289. 'FINSI' ;
  290. 'SI' ('NON' ldisg) ;
  291. gdisc = vtyp ;
  292. 'FINSI' ;
  293. *
  294. 'SI' ('OU' laxi lsph) ;
  295. lu = 'MOTS' 'UR' 'UZ' ;
  296. lf = 'MOTS' 'FR' 'FZ' ;
  297. 'SINON' ;
  298. lu = 'MOTS' 'UX' 'UY' 'UZ' ;
  299. lf = 'MOTS' 'FX' 'FY' 'FZ' ;
  300. 'FINSI' ;
  301. *
  302. lextr = 'LECT' 1 'PAS' 1 idim ;
  303. *
  304. lpr = 'EXTRAIRE' lu lextr ; ldu = 'EXTRAIRE' lf lextr ;
  305. *
  306. * Métrique
  307. *
  308. 'SI' ladap;
  309. 'SI' lchad ;
  310. * $mt = 'MODE' _mt 'NAVIER_STOKES' 'QUAF' ;
  311. * chpmet = 'KCHA' $mt chad 'CHPO' 'QUAF' ;
  312. * metdisc = 'CSTE' ;
  313. * $mt = 'MODELISER' mail 'THERMIQUE' ;
  314. chpmet = 'CHANGER' 'CHPO' kmodl1 chad ;
  315. metdisc = gdisc ;
  316. 'FINSI' ;
  317. 'SI' lchp ;
  318. chpmet = chp ;
  319. 'SI' ('NON' lmetdisc) ;
  320. metdisc = gdisc ;
  321. 'FINS' ;
  322. 'FINSI' ;
  323. 'FINSI' ;
  324. *
  325. * Conditions aux limites sur les déplacements
  326. *
  327. 'SI' ('NON' lrb) ;
  328. 'SI' ('EGA' idim 1) ;
  329. * Faute de mieux : contour ne fonctionne pas en 1D
  330. bord = 'ET' ('POIN' mail 'INITIAL')
  331. ('POIN' mail 'FINAL') ;
  332. 'FINSI' ;
  333. 'SI' ('EGA' idim 2) ;
  334. bord = 'CONTOUR' mail ;
  335. * rblo = 'BLOQUE' 'UX' 'UY' bord ;
  336. 'FINSI' ;
  337. 'SI' ('EGA' idim 3) ;
  338. bord = 'ENVELOPPE' mail ;
  339. * rblo = 'BLOQUE' 'UX' 'UY' 'UZ' bord ;
  340. 'FINSI' ;
  341. rblo = 'BLOQUE' 'DEPL' bord ;
  342. 'FINSI' ;
  343. *
  344. * Initilisations diverses
  345. *
  346. iniform = 'FORME' ;
  347. tres = 'TABLE' ;
  348. dx = 'MANUEL' 'CHPO' mail lpr ('PROG') ;
  349. det0 = DEADJACO _mt gdisc methgau ;
  350. tyde = 'TYPE' det0 ;
  351. 'SI' ('EGA' tyde 'ENTIER') ;
  352. chinfo = 'CHAINE' 'DEDUADAP : the mesh is already skew !' ;
  353. 'MESSAGE' chinfo ;
  354. * 426 2 Maillage incorrect
  355. 'ERRE' 426 ;
  356. 'FINSI' ;
  357. 'SI' ladap ;
  358. fonc0 = DEADFONC _mt gdisc methgau theta gamma
  359. chpmet metdisc 'ELEM' ;
  360. 'SI' lidir ;
  361. res = DEADRESI _mt gdisc methgau theta gamma ldu
  362. chpmet metdisc idir ;
  363. 'SINON' ;
  364. res = DEADRESI _mt gdisc methgau theta gamma ldu
  365. chpmet metdisc ;
  366. 'FINSI' ;
  367. 'SINON' ;
  368. fonc0 = DEADFONC _mt gdisc methgau theta gamma 'ELEM' ;
  369. 'SI' lidir ;
  370. res = DEADRESI _mt gdisc methgau theta gamma ldu idir ;
  371. 'SINON' ;
  372. res = DEADRESI _mt gdisc methgau theta gamma ldu ;
  373. 'FINSI' ;
  374. 'FINSI' ;
  375. dampi = damp ;
  376. fonci = fonc0 ;
  377. deti = det0 ;
  378. 'SI' acccvg ;
  379. znacce = 3 ; itdep = 3 ;
  380. acfp1 = 'COPIER' ('*' res 0.) ; acfp2 = acfp1 ;
  381. acfp3 = acfp1 ; acfep1 = acfp1;
  382. acfep2 = acfp1 ; correc=0.; freap = 0. ;
  383. 'FINSI' ;
  384. *
  385. * Algorithme non linéaire
  386. *
  387. cvgok = FAUX ;
  388. 'REPETER' it itmax ;
  389. dampi = 'MINIMUM' ('PROG' damp ('*' dampi fback)) ;
  390. 'SI' debug ;
  391. ch = 'CHAINE' ' Itération : ' &it ;
  392. 'MESSAGE' ch ;
  393. ch = 'CHAINE' ' dampi=' dampi ;
  394. 'MESSAGE' ch ;
  395. 'FINSI' ;
  396. *
  397. * Calcul du résidu
  398. *
  399. * partie liée à la fonctionnelle
  400. 'SI' ladap ;
  401. 'SI' lidir ;
  402. resf = DEADRESI _mt gdisc methgau theta gamma ldu
  403. chpmet metdisc idir ;
  404. 'SINON' ;
  405. resf = DEADRESI _mt gdisc methgau theta gamma ldu
  406. chpmet metdisc ;
  407. 'FINSI' ;
  408. 'SINON' ;
  409. 'SI' lidir ;
  410. resf = DEADRESI _mt gdisc methgau theta gamma ldu idir ;
  411. 'SINON' ;
  412. resf = DEADRESI _mt gdisc methgau theta gamma ldu ;
  413. 'FINSI' ;
  414. 'FINSI' ;
  415. * partie liée aux blocages
  416. resb = '*' rblo dx ;
  417. 'SI' lcb ;
  418. resb = resb '-' cblo ;
  419. 'FINSI' ;
  420. res = resf '+' resb ;
  421. * acceleration de convergence
  422. 'SI' acccvg ;
  423. correcp = correc; correc = 0;
  424. acfp0 = 'ENLEVER' (res - freap) 'FLX' ;
  425. acfep0 = acfp0;
  426. acfep0 = acfep0 - correcp ;
  427. 'SI' ('MULT' &it znacce) ;
  428. 'SI' ('>' &it itdep) ;
  429. 'SI' ('>' dampi ('*' damp 0.9)) ;
  430. 'SI' debug ;
  431. 'MESSAGE' 'Convergence acceleration' ;
  432. 'FINSI' ;
  433. correc = act3 acfep2 acfep1 acfep0
  434. acfp3 acfp2 acfp1 acfp0 ;
  435. res = '-' res correc;
  436. 'FINSI' ;
  437. 'FINSI' ;
  438. 'FINSI' ;
  439. 'SI' ('>' &it 3) ;
  440. 'DETRUIT' acfp3 ;
  441. 'DETRUIT' acfep2 ;
  442. 'FINSI' ;
  443. acfp3 = acfp2 ; acfp2 = acfp1 ; acfp1 = acfp0 ;
  444. acfep2 = acfep1 ; acfep1 = acfep0 ;
  445. 'MENAGE' ;
  446. 'FINSI' ;
  447. *
  448. * Calcul de la matrice tangente
  449. *
  450. 'SI' ('MULT' ('-' &it 1) rktan) ;
  451. 'SI' ladap ;
  452. 'SI' lidir ;
  453. jac = DEADKTAN _mt gdisc methgau theta gamma
  454. lpr ldu chpmet metdisc iktan idir ;
  455. 'SINON' ;
  456. jac = DEADKTAN _mt gdisc methgau theta gamma
  457. lpr ldu iktan chpmet metdisc ;
  458. 'FINSI' ;
  459. 'SINON' ;
  460. 'SI' lidir ;
  461. jac = DEADKTAN _mt gdisc methgau theta gamma
  462. lpr ldu iktan idir ;
  463. 'SINON' ;
  464. jac = DEADKTAN _mt gdisc methgau theta gamma
  465. lpr ldu iktan ;
  466. 'FINSI' ;
  467. 'FINSI' ;
  468. jact = 'ET' jac rblo ;
  469. 'FINSI' ;
  470. *
  471. * Résolution du problème linéarisé
  472. *
  473. 'SI' ltinv ;
  474. mat smb = jact ('*' -1.D0 res) ;
  475. 'SI' ('EGA' (tinv . 'TYPINV') 0) ;
  476. 'OPTI' impi 0 ;
  477. sol = 'RESOUD' mat smb 'NOID' ;
  478. 'OPTI' impi 0 ;
  479. 'SINON' ;
  480. 'SI' ('EXISTE' tinv 'LTIME') ;
  481. ltime = tinv . 'LTIME' ;
  482. 'SINON' ;
  483. ltime = FAUX ;
  484. 'FINSI' ;
  485. *
  486. 'SI' ('EGA' ltime vrai) ;
  487. sol tt = 'KRES' mat smb 'TYPI' tinv ;
  488. 'LISTE' tt ;
  489. 'SINON' ;
  490. sol = 'KRES' mat smb 'TYPI' tinv ;
  491. 'FINSI' ;
  492. 'FINSI' ;
  493. ddx = sol ;
  494. 'SINON' ;
  495. ddx = 'RESO' jact ('*' -1.D0 res) ;
  496. 'FINSI' ;
  497. * 'LISTE' ddx ;
  498. *
  499. *
  500. *
  501. 'SI' acccvg ;
  502. freap = reac rblo ddx ;
  503. * resx = 'ENLEVER' ('-' res (reac rblo ddx)) 'FLX' ;
  504. * resx2 = 'ENLEVER' (res) 'FLX' ;
  505. 'FINSI' ;
  506. *
  507. * Backtracking
  508. *
  509. backok = FAUX ;
  510. 'REPETER' iback nback ;
  511. 'SI' ('>' &iback 1) ;
  512. dampi = '/' dampi fback ;
  513. 'SI' debug ;
  514. ch = 'CHAINE' ' dampi=' dampi ;
  515. 'MESSAGE' ch ;
  516. 'FINSI' ;
  517. 'FINSI' ;
  518. ddxi = '*' ddx dampi ;
  519. depx = 'EXCO' lpr ddxi lpr 'NOID' ;
  520. * Test si le déplacement calculé inverse un jacobien
  521. * ou le change trop
  522. oldconf = 'FORME' ;
  523. 'FORME' depx ;
  524. detip = DEADJACO _mt gdisc methgau ;
  525. 'FORME' oldconf ;
  526. tyde = 'TYPE' detip ;
  527. 'SI' ('EGA' tyde 'ENTIER') ;
  528. 'SI' debug ;
  529. ch = 'CHAINE' ' Warning : inv. loc. jacobien !' ;
  530. 'MESSAGE' ch ;
  531. 'FINSI' ;
  532. 'SINON' ;
  533. vardet = ('/' detip deti) ;
  534. mivd = 'MINIMUM' vardet ;
  535. mavd = 'MAXIMUM' vardet ;
  536. 'SI' debug ;
  537. 'MESSAGE' ('CHAINE' 'Mini var jaco = ' mivd ) ;
  538. 'MESSAGE' ('CHAINE' 'Maxi var jaco = ' mavd ) ;
  539. 'FINSI' ;
  540. bigvar = 'OU' ('>' mavd fvdet) ('<' mivd ('/' 1.D0 fvdet)) ;
  541. 'SI' bigvar ;
  542. 'SI' debug ;
  543. ch = 'CHAINE'
  544. ' Warn : trop grande variation du jaco !' ;
  545. 'MESSAGE' ch ;
  546. 'FINSI' ;
  547. 'SINON' ;
  548. backok = VRAI ;
  549. 'QUITTER' iback ;
  550. 'FINSI' ;
  551. 'FINSI' ;
  552. 'FIN' iback ;
  553. 'SI' ('NON' backok) ;
  554. chinfo1 = 'CHAINE'
  555. 'DEDUADAP : Backtracking failed to converge !' ;
  556. 'MESSAGE' chinfo1 ;
  557. chinfo2 = 'CHAINE' 'Please check the output displacement'
  558. 'MESSAGE' chinfo2 ;
  559. dep = 'EXCO' lpr dx lpr ;
  560. 'RESPRO' dep ;
  561. 'QUITTER' DEDUADAP ;
  562. 'FINSI' ;
  563. dx = '+' dx ddxi ;
  564. 'FORME' depx ;
  565. 'SI' ladap ;
  566. foncip = DEADFONC _mt gdisc methgau theta gamma
  567. chpmet metdisc 'ELEM' ;
  568. 'SINON' ;
  569. foncip = DEADFONC _mt gdisc methgau theta gamma 'ELEM' ;
  570. 'FINSI' ;
  571. *
  572. * Critère de convergence
  573. *
  574. vrrfon = '/' ('-' foncip fonci) fonci ;
  575. critconv = 'MAXIMUM' vrrfon 'ABS' ;
  576. tres . &it = critconv ;
  577. cvgok = ('<' critconv rfonc) ;
  578. 'SI' debug ;
  579. chmess = 'CHAINE' ' critere = ' critconv ;
  580. 'MESSAGE' chmess ;
  581. 'FINSI' ;
  582. deti = detip ;
  583. fonci = foncip ;
  584. 'SI' debug ;
  585. tit = 'CHAINE' 'Maillage ; it=' &it ' crit=' critconv ;
  586. TRAC 'CACH' mail 'TITR' tit 'NCLK' ;
  587. 'FINSI' ;
  588. 'SI' cvgok ;
  589. 'QUITTER' it ;
  590. 'FINSI' ;
  591. 'FIN' it ;
  592. 'FORME' iniform ;
  593. dep = 'EXCO' lpr dx lpr ;
  594. *
  595. itfin = ('-' &it 1) ;
  596. 'SI' debug ;
  597. ch = 'CHAINE' ' Iteration finale : ' itfin ;
  598. 'MESSAGE' ch ;
  599. lit = 'PROG' 1. 'PAS' 1. 'NPAS' ('-' itfin 1) ;
  600. lres = 'PROG' ;
  601. 'REPETER' it itfin ;
  602. lres = 'ET' lres ('PROG'
  603. ('/' ('LOG' ('+' (tres . &it ) 1.D-16))
  604. ('LOG' 10.D0) )) ;
  605. 'FIN' it ;
  606. titev = 'CHAINE' 'LOG10 Critere (iterations)' ;
  607. evres = 'EVOL' 'MANU' lit lres 'TITR' titev ;
  608. 'DESSIN' evres ;
  609. 'FINSI' ;
  610. *
  611. 'RESPRO' dep ;
  612. *
  613. * End of procedure file DEDUADAP
  614. *
  615. 'FINPROC' ;
  616.  
  617.  

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