Télécharger prkres.eso

Retour à la liste

Numérotation des lignes :

prkres
  1. C PRKRES SOURCE GOUNAND 25/04/30 21:15:34 12258
  2. SUBROUTINE PRKRES(MATRIK,MTINV,IMPR,KCLIM,KSMBR,KTYPI,MATASS,
  3. $ MAPREC,
  4. $ MRENU,MMULAG,ISCAL,INORMU,IOUBL,IMPINV,MCHINI,ITER,RESID,
  5. $ BRTOL,IRSTRT,KPREC,RXMILU,RXILUP,XLFIL,XDTOL,XSPIV,LBCG,
  6. $ ICALRS,METASS,LTIME,NELIM,MRIGID,IDDOT,IMVEC,IORINC,MLAG1
  7. $ ,MLAG2,LDUMP,ISMOOT,IRET)
  8. IMPLICIT REAL*8 (A-H,O-Z)
  9. IMPLICIT INTEGER (I-N)
  10. C***********************************************************************
  11. C NOM : PRKRES
  12. C DESCRIPTION :
  13. C Lecture des arguments et mise à défaut des optionnels ()
  14. C
  15. C MATRIK : La matrice lue en entrée au format MATRIK
  16. C MTINV : L'éventuelle table d'inversion (obsolète)
  17. C IMPR : Niveau d'impression solveur direct
  18. C KCLIM : Chpoint éventuel de conditions aux limites de Dirichlet
  19. C KSMBR : Chpoint second membre
  20. C KTYPI : Type de méthode de résolution
  21. C MATASS : Matrice utilisée pour préconditionner l'assemblage
  22. C MAPREC : Matrice utilisée pour préconditionner la construction du
  23. C préconditionneur
  24. C MRENU : Type de renumérotation
  25. C MMULAG : Placement des multiplicateurs de Lagrange
  26. C ISCAL : Scaling de la matrice
  27. C INORMU : Mise à l'échelle des multiplicateurs de Lagrange
  28. C IOUBL : Oubli des matrices élémentaires ?
  29. C IMPINV : Niveau d'impression solveur itératif
  30. C MCHINI : Chpoint estimation de l'inconnue
  31. C ITER : Nombre maxi d'itérations à effectuer
  32. C RESID : Norme L2 maxi du résidu
  33. C BRTOL : Breakdown tolerance pour les méthodes de type Bi-CG
  34. C IRSTRT : Paramètre m de redémarrage pour GMRES
  35. C KPREC : Type du préconditionneur
  36. C RXMILU : Paramètre de relaxation pour MILU(0)
  37. C RXILUP : Paramètre de filtre pour ILU(0)-PV
  38. C XLFIL : Paramètre de remplissage pour les préconditionneurs ILUT
  39. C XDTOL : Drop tolerance pour les préconditionneurs ILUT
  40. C XSPIV : Sensibilité du pivoting pour les préconditionneurs ILUTP
  41. C LBCG : le l dans BicgStab(l)
  42. C ICALRS : façon de calculer le résidu
  43. C METASS : méthode d'assemblage (obsolete)
  44. C LTIME : construit une table avec des statistiques temporelles
  45. C si vrai
  46. C NELIM : nombre de passes d'elimination
  47. C Par defaut : 2
  48. C IDDOT : 0 => utilisation du produit scalaire normal dans les
  49. C méthodes itératives
  50. C 1 => utilisation du produit scalaire compensé
  51. C IMVEC : 0, pas de parallélisme pour les produits matrice-vecteur
  52. C 1, parallélisme stratégie 1, entrelace les lignes.
  53. C 2, parallélisme stratégie 2, groupe les lignes.
  54. C Par defaut : 2
  55. C IORINC : pointeur sur une LISTE de LISTMOTS indiquant quels noms
  56. C d'inconnues pour chaque bloc pour AGMG par blocs
  57. C Par defaut : 0
  58. C MLAG1 : pointeur sur un LISTMOTS indiquant les noms d'inconnues a
  59. C traiter comme des multiplicateurs de Lagrange, à placer après les
  60. C inconnues en relation
  61. C Par defaut : 0
  62. C MLAG2 : pointeur sur un LISTMOTS indiquant les noms d'inconnues a
  63. C traiter comme des multiplicateurs de Lagrange, à placer avant les
  64. C inconnues en relation
  65. C Par defaut : 0
  66. C LDUMP : LOGIQUE valant vrai si on sort les informations completes
  67. C de resolution du systeme lineaire par AGMG en fichiers ASCII.
  68. C ISMOOT : smoother pour AGMG bloc (7 ou 8)
  69. C 0 : Gauss-Seidel si symétrique
  70. C SOR(omega_calc) sinon
  71. C -1 : SOR(0.7) adéquat pour éléments quadratiques.
  72. C 1 : GS
  73. C 2 : ILU
  74. C -2 : ILU(0.7)
  75. C
  76. C LANGAGE : ESOPE
  77. C AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  78. C mél : gounand@semt2.smts.cea.fr
  79. C***********************************************************************
  80. C APPELES :
  81. C APPELES (E/S) :
  82. C APPELES (BLAS) :
  83. C APPELES (CALCUL) :
  84. C APPELE PAR :
  85. C***********************************************************************
  86. C SYNTAXE GIBIANE :
  87. C ENTREES :
  88. C ENTREES/SORTIES :
  89. C SORTIES :
  90. C CODE RETOUR (IRET) : = 0 si tout s'est bien passé
  91. C***********************************************************************
  92. C VERSION : v1, 22/02/2006, version initiale
  93. C HISTORIQUE : v1, 22/02/2006, création
  94. C HISTORIQUE :
  95. C HISTORIQUE :
  96. C***********************************************************************
  97. C Prière de PRENDRE LE TEMPS de compléter les commentaires
  98. C en cas de modification de ce sous-programme afin de faciliter
  99. C la maintenance !
  100. C***********************************************************************
  101. -INC CCREEL
  102.  
  103. -INC PPARAM
  104. -INC CCOPTIO
  105. -INC SMCHPOI
  106. POINTEUR KCLIM.MCHPOI
  107. POINTEUR KSMBR.MCHPOI
  108. POINTEUR MCHINI.MCHPOI
  109. POINTEUR MCHSOL.MCHPOI
  110. -INC SMTABLE
  111. POINTEUR MTINV.MTABLE
  112. *-INC SMMATRIK
  113. * POINTEUR MAPREC.MATRIK
  114. * POINTEUR MATASS.MATRIK
  115. -INC SMRIGID
  116. -INC SMELEME
  117. -INC SMLOBJE
  118. POINTEUR IORINC.MLOBJE
  119. *
  120. INTEGER KTYPI,ISCAL,INORMU,IOUBL,IMPINV,ITER,IRSTRT,KPREC
  121. REAL*8 RESID,BRTOL,RXMILU,RXILUP,XLFIL,XDTOL,XSPIV
  122. CHARACTER*4 MRENU,MMULAG
  123. *
  124. CHARACTER*8 TYPI,TYPR,TYP2,BLAN,TYPE,MTYP,TYPOBL,TYPOBA
  125. CHARACTER*8 TYTABL,TYLMOT,TYCHPO,TYMOT,TYENT,TYFLO,TYLENT
  126. CHARACTER*8 TYMATK,TYRIGI,INDTAB,TYLOG
  127. *
  128. INTEGER IBID,IVAL,IOBJ
  129. REAL*8 XBID,XVAL
  130. CHARACTER*4 CBID,CVAL
  131. LOGICAL LBID,LVAL,LTIME,LMRENU,LMETAS,LDEPE,LLDEPE,LDUMP
  132. LOGICAL LMUANO,LNORMA
  133. *
  134. INTEGER IMPR,IRET
  135. PARAMETER (NMOT=36)
  136. CHARACTER*8 MOTSCL(NMOT),TYARG(NMOT)
  137. C CALL PRKRES(MATRIK,MTINV,IMPR,KCLIM,KSMBR,KTYPI,MATASS,MAPREC,
  138. C $ MRENU,MMULAG,ISCAL,INORMU,IOUBL,IMPINV,MCHINI,ITER,RESID,BRTOL,
  139. C $ IRSTRT,KPREC,RXMILU,XLFIL,XDTOL,XSPIV,IMPR,IRET)
  140. DATA MOTSCL/
  141. $ 'IMPR ','TYPI ','CLIM ','SMBR ','TYPINV ',
  142. $ 'MATASS ','MAPREC ','TYRENU ','PCMLAG ','SCALING ',
  143. $ 'SCALAG ',
  144. $ 'OUBMAT ','IMPINV ','XINIT ','NITMAX ','RESID ',
  145. $ 'BCGSBTOL','GMRESTRT','PRECOND ','MILURELX','ILUTLFIL',
  146. $ 'ILUTDTOL','ILUTPPIV','LBCG ','CALRES ','METASS ',
  147. $ 'LTIME ','ELIM ','ILUPRELX','IDDOT ','IMVEC ',
  148. $ 'ORDINC ','LAGR1 ','LAGR2 ','DUMP ','SMOOTHER'/
  149. DATA TYARG/
  150. $ 'ENTIER ','TABLE ','CHPOINT ','CHPOINT ','ENTIER ',
  151. $ 'MATRIK ','MATRIK ','MOT ','MOT ','ENTIER ',
  152. $ 'ENTIER ',
  153. $ 'ENTIER ','ENTIER ','CHPOINT ','ENTIER ','FLOTTANT',
  154. $ 'FLOTTANT','ENTIER ','ENTIER ','FLOTTANT','FLOTTANT',
  155. $ 'FLOTTANT','FLOTTANT','ENTIER ','ENTIER ','ENTIER ',
  156. $ 'LOGIQUE ','ENTIER ','FLOTTANT','ENTIER ','ENTIER ',
  157. $ 'LISTOBJE','LISTMOTS','LISTMOTS','LOGIQUE ','ENTIER '/
  158. DATA TYTABL,TYCHPO,TYMOT,TYENT,TYFLO,TYMATK,TYRIGI,BLAN,TYLOG
  159. $ ,TYLMOT/
  160. $ 'TABLE ','CHPOINT ','MOT ','ENTIER ','FLOTTANT',
  161. $ 'MATRIK ','RIGIDITE',' ','LOGIQUE ','LISTMOTS'/
  162. *
  163. * Executable statements
  164. *
  165. IF (IMPR.GT.2) WRITE(IOIMP,*) 'Entrée dans prkres.eso'
  166. *
  167. * Lecture de la matrice
  168. *
  169. TYPE=BLAN
  170. CALL QUETYP(TYPE,1,IRET)
  171. IF (IRET.EQ.0) GOTO 9999
  172. IF (TYPE.EQ.TYRIGI) THEN
  173. MATRIK=0
  174. CALL LIROBJ(TYPE,MRIGID,1,IRET)
  175. * WRITE(IOIMP,*) 'Ap MACHI2'
  176. * WRITE(IOIMP,*) 'Non implémenté'
  177. * GOTO 9999
  178. ELSE
  179. MRIGID=0
  180. TYPE=TYMATK
  181. CALL LIROBJ(TYPE,MATRIK,1,IRET)
  182. IF(IRET.EQ.0) GOTO 9999
  183. ENDIF
  184. *
  185. * Lecture du second membre éventuel
  186. *
  187. KSMBR=0
  188. CALL QUETYP(TYPE,1,IRET)
  189. IF (TYPE.EQ.TYCHPO) THEN
  190. CALL LIROBJ(TYPE,KSMBR,1,IRET)
  191. IF(IRET.EQ.0) GOTO 9999
  192. ENDIF
  193. *
  194. * Valeurs par défaut
  195. *
  196. C CALL PRKRES(MATRIK,MTINV,IMPR,KCLIM,KSMBR,KTYPI,MATASS,MAPREC,
  197. C $ MRENU,MMULAG,ISCAL,IOUBL,IMPINV,MCHINI,ITER,RESID,BRTOL,
  198. C $ IRSTRT,KPREC,RXMILU,XLFIL,XDTOL,XSPIV,LBCG,IRET)
  199. MTINV=0
  200. IMPR=0
  201. KCLIM=0
  202. KTYPI=1
  203. MATASS=MATRIK
  204. MAPREC=MATRIK
  205. MRENU='SLOA'
  206. LMRENU=.FALSE.
  207. MMULAG='APR2'
  208. ISCAL=0
  209. INORMU=1
  210. IF (MRIGID.NE.0) THEN
  211. IOUBL=1
  212. ELSE
  213. IOUBL=0
  214. ENDIF
  215. IMPINV=0
  216. MCHINI=0
  217. ITER=2000
  218. RESID=1.D-10
  219. BRTOL=1.D-40
  220. IRSTRT=50
  221. KPREC=3
  222. RXMILU=1.D0
  223. RXILUP=0.5D0
  224. XLFIL=2.D0
  225. XDTOL=-1.D0
  226. XSPIV=0.1D0
  227. LBCG=4
  228. ICALRS=0
  229. METASS=5
  230. LMETAS=.FALSE.
  231. LTIME=.FALSE.
  232. IF (MRIGID.NE.0) THEN
  233. NELIM=2
  234. ELSE
  235. NELIM=0
  236. ENDIF
  237. IDDOT=0
  238. IMVEC=2
  239. ith=oothrd
  240. IF(ITH.NE.0)THEN
  241. IMVEC=0
  242. ENDIF
  243. IORINC=0
  244. MLAG1=0
  245. MLAG2=0
  246. LDUMP=.FALSE.
  247. ISMOOT=0
  248. *
  249. * Boucle de lecture des arguments
  250. *
  251. 1 CONTINUE
  252. CALL LIRMOT(MOTSCL,NMOT,IRAN,0)
  253. IF(IRAN.EQ.0) GOTO 2
  254. IF (IRAN.EQ.2) THEN
  255. CALL LIRTAB('METHINV',MTINV,1,IRET)
  256. IF (IRET.EQ.0) GOTO 9999
  257. *
  258. * Lectures des indices de table
  259. *
  260. * WRITE(IOIMP,*) 'Lecture de la table'
  261. DO I=1,NMOT
  262. TYPI=TYMOT
  263. TYPR=BLAN
  264. TYPE=TYARG(I)
  265. INDTAB=MOTSCL(I)
  266. * WRITE(IOIMP,*) 'INDTAB=',INDTAB
  267. CALL ACCTAB(MTINV,TYPI,IBID,XBID,INDTAB,LBID,IBID,
  268. $ TYPR,IVAL,XVAL,CVAL,LVAL,IOBJ)
  269. IF (IERR.NE.0) GOTO 9999
  270. IF (TYPR.NE.TYPE) THEN
  271. IF (TYPR.EQ.TYENT.AND.TYPE.EQ.TYFLO) THEN
  272. XVAL=IVAL
  273. ELSEIF (TYPR.NE.BLAN) THEN
  274. WRITE(IOIMP,*) 'Index ',INDTAB,' : ',TYPR,
  275. $ ' type object instead of ',TYPE
  276. GOTO 9999
  277. ENDIF
  278. ENDIF
  279. IF (TYPR.NE.BLAN) THEN
  280. IF (I.EQ.1) THEN
  281. IMPR=IVAL
  282. * I.EQ.2 n'a pas de sens
  283. ELSEIF (I.EQ.3) THEN
  284. KCLIM=IOBJ
  285. ELSEIF (I.EQ.4) THEN
  286. KSMBR=IOBJ
  287. ELSEIF (I.EQ.5) THEN
  288. KTYPI=IVAL
  289. ELSEIF (I.EQ.6) THEN
  290. MATASS=IOBJ
  291. ELSEIF (I.EQ.7) THEN
  292. MAPREC=IOBJ
  293. ELSEIF (I.EQ.8) THEN
  294. MRENU=CVAL
  295. LMRENU=.TRUE.
  296. ELSEIF (I.EQ.9) THEN
  297. MMULAG=CVAL
  298. ELSEIF (I.EQ.10) THEN
  299. ISCAL=IVAL
  300. ELSEIF (I.EQ.11) THEN
  301. INORMU=IVAL
  302. ELSEIF (I.EQ.12) THEN
  303. IOUBL=IVAL
  304. ELSEIF (I.EQ.13) THEN
  305. IMPINV=IVAL
  306. ELSEIF (I.EQ.14) THEN
  307. MCHINI=IOBJ
  308. ELSEIF (I.EQ.15) THEN
  309. ITER=IVAL
  310. ELSEIF (I.EQ.16) THEN
  311. RESID=XVAL
  312. ELSEIF (I.EQ.17) THEN
  313. BRTOL=XVAL
  314. ELSEIF (I.EQ.18) THEN
  315. IRSTRT=IVAL
  316. ELSEIF (I.EQ.19) THEN
  317. KPREC=IVAL
  318. ELSEIF (I.EQ.20) THEN
  319. RXMILU=XVAL
  320. ELSEIF (I.EQ.21) THEN
  321. XLFIL=XVAL
  322. ELSEIF (I.EQ.22) THEN
  323. XDTOL=XVAL
  324. ELSEIF (I.EQ.23) THEN
  325. XSPIV=XVAL
  326. ELSEIF (I.EQ.24) THEN
  327. LBCG=IVAL
  328. ELSEIF (I.EQ.25) THEN
  329. ICALRS=IVAL
  330. ELSEIF (I.EQ.26) THEN
  331. METASS=IVAL
  332. LMETAS=.TRUE.
  333. ELSEIF (I.EQ.27) THEN
  334. LTIME=LVAL
  335. ELSEIF (I.EQ.28) THEN
  336. NELIM=IVAL
  337. ELSEIF (I.EQ.29) THEN
  338. RXILUP=XVAL
  339. ELSEIF (I.EQ.30) THEN
  340. IDDOT=IVAL
  341. ELSEIF (I.EQ.31) THEN
  342. IMVEC=IVAL
  343. ELSEIF (I.EQ.32) THEN
  344. IORINC=IOBJ
  345. ELSEIF (I.EQ.33) THEN
  346. MLAG1=IOBJ
  347. ELSEIF (I.EQ.34) THEN
  348. MLAG2=IOBJ
  349. ELSEIF (I.EQ.35) THEN
  350. LDUMP=LVAL
  351. ELSEIF (I.EQ.36) THEN
  352. ISMOOT=IVAL
  353. ELSE
  354. WRITE(IOIMP,*) 'Programing error'
  355. CALL ERREUR(5)
  356. GOTO 9999
  357. ENDIF
  358. ENDIF
  359. ENDDO
  360. ELSE
  361. TYPE=TYARG(IRAN)
  362. IF (TYPE.EQ.TYENT) THEN
  363. CALL LIRENT(IVAL,1,IRET)
  364. ELSEIF (TYPE.EQ.TYFLO) THEN
  365. CALL LIRREE(XVAL,1,IRET)
  366. ELSEIF (TYPE.EQ.TYMOT) THEN
  367. CALL LIRCHA(CVAL,1,IRET)
  368. ELSEIF (TYPE.EQ.TYLOG) THEN
  369. CALL LIRLOG(LVAL,1,IRET)
  370. ELSE
  371. CALL LIROBJ(TYPE,IOBJ,1,IRET)
  372. ENDIF
  373. IF (IRET.EQ.0) THEN
  374. WRITE(IOIMP,*) MOTSCL(IRAN)
  375. GOTO 9999
  376. ENDIF
  377. IF (IRAN.EQ.1) THEN
  378. IMPR=IVAL
  379. * I.EQ.2 n'a pas de sens
  380. ELSEIF (IRAN.EQ.3) THEN
  381. KCLIM=IOBJ
  382. ELSEIF (IRAN.EQ.4) THEN
  383. KSMBR=IOBJ
  384. ELSEIF (IRAN.EQ.5) THEN
  385. KTYPI=IVAL
  386. ELSEIF (IRAN.EQ.6) THEN
  387. MATASS=IOBJ
  388. ELSEIF (IRAN.EQ.7) THEN
  389. MAPREC=IOBJ
  390. ELSEIF (IRAN.EQ.8) THEN
  391. MRENU=CVAL
  392. LMRENU=.TRUE.
  393. ELSEIF (IRAN.EQ.9) THEN
  394. MMULAG=CVAL
  395. ELSEIF (IRAN.EQ.10) THEN
  396. ISCAL=IVAL
  397. ELSEIF (IRAN.EQ.11) THEN
  398. INORMU=IVAL
  399. ELSEIF (IRAN.EQ.12) THEN
  400. IOUBL=IVAL
  401. ELSEIF (IRAN.EQ.13) THEN
  402. IMPINV=IVAL
  403. ELSEIF (IRAN.EQ.14) THEN
  404. MCHINI=IOBJ
  405. ELSEIF (IRAN.EQ.15) THEN
  406. ITER=IVAL
  407. ELSEIF (IRAN.EQ.16) THEN
  408. RESID=XVAL
  409. ELSEIF (IRAN.EQ.17) THEN
  410. BRTOL=XVAL
  411. ELSEIF (IRAN.EQ.18) THEN
  412. IRSTRT=IVAL
  413. ELSEIF (IRAN.EQ.19) THEN
  414. KPREC=IVAL
  415. ELSEIF (IRAN.EQ.20) THEN
  416. RXMILU=XVAL
  417. ELSEIF (IRAN.EQ.21) THEN
  418. XLFIL=XVAL
  419. ELSEIF (IRAN.EQ.22) THEN
  420. XDTOL=XVAL
  421. ELSEIF (IRAN.EQ.23) THEN
  422. XSPIV=XVAL
  423. ELSEIF (IRAN.EQ.24) THEN
  424. LBCG=IVAL
  425. ELSEIF (IRAN.EQ.25) THEN
  426. ICALRS=IVAL
  427. ELSEIF (IRAN.EQ.26) THEN
  428. METASS=IVAL
  429. LMETAS=.TRUE.
  430. ELSEIF (IRAN.EQ.27) THEN
  431. LTIME=LVAL
  432. ELSEIF (IRAN.EQ.28) THEN
  433. NELIM=IVAL
  434. ELSEIF (IRAN.EQ.29) THEN
  435. RXILUP=XVAL
  436. ELSEIF (IRAN.EQ.30) THEN
  437. IDDOT=IVAL
  438. ELSEIF (IRAN.EQ.31) THEN
  439. IMVEC=IVAL
  440. ELSEIF (IRAN.EQ.32) THEN
  441. IORINC=IOBJ
  442. ELSEIF (IRAN.EQ.33) THEN
  443. MLAG1=IOBJ
  444. ELSEIF (IRAN.EQ.34) THEN
  445. MLAG2=IOBJ
  446. ELSEIF (IRAN.EQ.35) THEN
  447. LDUMP=LVAL
  448. ELSEIF (IRAN.EQ.36) THEN
  449. ISMOOT=IVAL
  450. ELSE
  451. WRITE(IOIMP,*) 'Programing error 2'
  452. CALL ERREUR(5)
  453. GOTO 9999
  454. ENDIF
  455. ENDIF
  456. GOTO 1
  457. *
  458. * Fin des lectures
  459. *
  460. 2 CONTINUE
  461. C MTYP=TYMATK
  462. C CALL ECRENT(6)
  463. C CALL ECROBJ(MTYP,MATRIK)
  464. C CALL PRLIST
  465. C MTYP=TYCHPO
  466. C CALL ECROBJ(MTYP,KSMBR)
  467. C CALL PRLIST
  468. *
  469. * Vérification de la validité de certains paramètres
  470. *
  471. C CALL PRKRES(MATRIK,MTINV,IMPR,KCLIM,KSMBR,KTYPI,MATASS,MAPREC,
  472. C $ MRENU,MMULAG,ISCAL,IOUBL,IMPINV,MCHINI,ITER,RESID,BRTOL,
  473. C $ IRSTRT,KPREC,RXMILU,XLFIL,XDTOL,XSPIV,LBCG,IRET)
  474. C 41 2
  475. C %m1:8 = %r1 inférieur à %r2
  476. C 42 2
  477. C %m1:8 = %r1 non compris entre %r2 et %r3
  478. C 43 2
  479. C %m1:8 = %r1 supérieur à %r2
  480. IINF=0
  481. ISUP=2
  482. IF (ISCAL.LT.IINF.OR.ISCAL.GT.ISUP) THEN
  483. MOTERR(1:8)=MOTSCL(10)
  484. REAERR(1)=ISCAL
  485. REAERR(2)=IINF
  486. REAERR(3)=ISUP
  487. CALL ERREUR(42)
  488. GOTO 9999
  489. ENDIF
  490. IINF=0
  491. ISUP=1
  492. IF (INORMU.LT.IINF.OR.INORMU.GT.ISUP) THEN
  493. MOTERR(1:8)=MOTSCL(11)
  494. REAERR(1)=INORMU
  495. REAERR(2)=IINF
  496. REAERR(3)=ISUP
  497. CALL ERREUR(42)
  498. GOTO 9999
  499. ENDIF
  500. IINF=0
  501. ISUP=22
  502. IF (IOUBL.LT.IINF.OR.IOUBL.GT.ISUP) THEN
  503. MOTERR(1:8)=MOTSCL(12)
  504. REAERR(1)=IOUBL
  505. REAERR(2)=IINF
  506. REAERR(3)=ISUP
  507. CALL ERREUR(42)
  508. GOTO 9999
  509. ENDIF
  510. IINF=0
  511. IF (ITER.LT.IINF) THEN
  512. MOTERR(1:8)=MOTSCL(15)
  513. REAERR(1)=ITER
  514. REAERR(2)=IINF
  515. CALL ERREUR(41)
  516. GOTO 9999
  517. ENDIF
  518. XINF=XZERO
  519. IF (RESID.LT.XINF-XZPREC) THEN
  520. MOTERR(1:8)=MOTSCL(16)
  521. REAERR(1)=RESID
  522. REAERR(2)=XINF
  523. CALL ERREUR(41)
  524. GOTO 9999
  525. ENDIF
  526. XINF=XZERO
  527. IF (BRTOL.LT.XINF-XZPREC) THEN
  528. MOTERR(1:8)=MOTSCL(17)
  529. REAERR(1)=BRTOL
  530. REAERR(2)=XINF
  531. CALL ERREUR(41)
  532. GOTO 9999
  533. ENDIF
  534. IINF=1
  535. IF (IRSTRT.LT.IINF) THEN
  536. MOTERR(1:8)=MOTSCL(18)
  537. REAERR(1)=IRSTRT
  538. REAERR(2)=IINF
  539. CALL ERREUR(41)
  540. GOTO 9999
  541. ENDIF
  542. XINF=XZERO
  543. XSUP=1.D0
  544. IF (RXMILU.LT.XINF-XZPREC.OR.RXMILU.GT.XSUP+XZPREC) THEN
  545. MOTERR(1:8)=MOTSCL(20)
  546. REAERR(1)=RXMILU
  547. REAERR(2)=XINF
  548. REAERR(3)=XSUP
  549. CALL ERREUR(42)
  550. GOTO 9999
  551. ENDIF
  552. XINF=XZERO
  553. IF (XLFIL.LT.XINF-XZPREC) THEN
  554. MOTERR(1:8)=MOTSCL(21)
  555. REAERR(1)=XLFIL
  556. REAERR(2)=XINF
  557. CALL ERREUR(41)
  558. GOTO 9999
  559. ENDIF
  560. XSUP=XZERO
  561. IF (XDTOL.GT.XSUP+XZPREC) THEN
  562. MOTERR(1:8)=MOTSCL(22)
  563. REAERR(1)=XDTOL
  564. REAERR(2)=XSUP
  565. CALL ERREUR(43)
  566. GOTO 9999
  567. ENDIF
  568. XINF=XZERO
  569. XSUP=1.D0
  570. IF (XSPIV.LT.XINF-XZPREC.OR.XSPIV.GT.XSUP+XZPREC) THEN
  571. MOTERR(1:8)=MOTSCL(23)
  572. REAERR(1)=XSPIV
  573. REAERR(2)=XINF
  574. REAERR(3)=XSUP
  575. CALL ERREUR(42)
  576. GOTO 9999
  577. ENDIF
  578. IINF=1
  579. IF (LBCG.LT.IINF) THEN
  580. MOTERR(1:8)=MOTSCL(24)
  581. REAERR(1)=LBCG
  582. REAERR(2)=IINF
  583. CALL ERREUR(41)
  584. GOTO 9999
  585. ENDIF
  586. IINF=0
  587. ISUP=1
  588. IF (ICALRS.LT.IINF.OR.ICALRS.GT.ISUP) THEN
  589. MOTERR(1:8)=MOTSCL(25)
  590. REAERR(1)=ICALRS
  591. REAERR(2)=IINF
  592. REAERR(3)=ISUP
  593. CALL ERREUR(42)
  594. GOTO 9999
  595. ENDIF
  596. IINF=1
  597. ISUP=6
  598. IF (METASS.LT.IINF.OR.METASS.GT.ISUP) THEN
  599. MOTERR(1:8)=MOTSCL(26)
  600. REAERR(1)=METASS
  601. REAERR(2)=IINF
  602. REAERR(3)=ISUP
  603. CALL ERREUR(42)
  604. GOTO 9999
  605. ENDIF
  606. IINF=0
  607. ISUP=30
  608. IF (NELIM.LT.IINF.OR.NELIM.GT.ISUP) THEN
  609. MOTERR(1:8)=MOTSCL(28)
  610. REAERR(1)=NELIM
  611. REAERR(2)=IINF
  612. REAERR(3)=ISUP
  613. CALL ERREUR(42)
  614. GOTO 9999
  615. ENDIF
  616. C XINF=XZERO
  617. C IF (RXILUP.LT.XINF-XZPREC) THEN
  618. C MOTERR(1:8)=MOTSCL(29)
  619. C REAERR(1)=RXILUP
  620. C REAERR(2)=XINF
  621. C CALL ERREUR(41)
  622. C GOTO 9999
  623. C ENDIF
  624. IINF=0
  625. ISUP=1
  626. IF (IDDOT.LT.IINF.OR.IDDOT.GT.ISUP) THEN
  627. MOTERR(1:8)=MOTSCL(30)
  628. REAERR(1)=IDDOT
  629. REAERR(2)=IINF
  630. REAERR(3)=ISUP
  631. CALL ERREUR(42)
  632. GOTO 9999
  633. ENDIF
  634. IINF=0
  635. ISUP=2
  636. IF (IMVEC.LT.IINF.OR.IMVEC.GT.ISUP) THEN
  637. MOTERR(1:8)=MOTSCL(31)
  638. REAERR(1)=IMVEC
  639. REAERR(2)=IINF
  640. REAERR(3)=ISUP
  641. CALL ERREUR(42)
  642. GOTO 9999
  643. ENDIF
  644. IF (IORINC.NE.0) THEN
  645. SEGACT IORINC
  646. TYPOBL=IORINC.TYPOBJ
  647. TYPOBA='LISTMOTS'
  648. IF (TYPOBL.NE.TYPOBA) THEN
  649. MOTERR(1:128)=MOTSCL(32)
  650. CALL ERREUR(-385)
  651. MOTERR(1:8)=TYPOBA
  652. CALL ERREUR(37)
  653. GOTO 9999
  654. ENDIF
  655. ENDIF
  656. IINF=-2
  657. ISUP=2
  658. IF (ISMOOT.LT.IINF.OR.ISMOOT.GT.ISUP) THEN
  659. MOTERR(1:8)=MOTSCL(36)
  660. REAERR(1)=ISMOOT
  661. REAERR(2)=IINF
  662. REAERR(3)=ISUP
  663. CALL ERREUR(42)
  664. GOTO 9999
  665. ENDIF
  666.  
  667. * S'il y a eu une tentative forte de l'utilisateur de fournir ce
  668. * paramètre.
  669. IF (MRIGID.EQ.0.AND.NELIM.GT.0) THEN
  670. * 134 2
  671. *Pas besoin d'objet %m1:8 quand il n'y a pas d'objet %m9:16
  672. MOTERR(1:8)='ELIM '
  673. MOTERR(9:16)='RIGIDITE'
  674. CALL ERREUR(134)
  675. GOTO 9999
  676. ENDIF
  677. *
  678. * Quand il y a un champ de conditions aux limites donné,
  679. * il est hasardeux d'essayer d'utiliser l'élimination des
  680. * dépendances en même temps
  681. *
  682. IF (MRIGID.NE.0.AND.KCLIM.NE.0.AND.NELIM.GT.0) THEN
  683. * 135 2
  684. *Incompatibilité entre l'objet %m1:8 et l'objet %m9:16
  685. MOTERR(1:8)='ELIM '
  686. MOTERR(9:16)='CLIM '
  687. CALL ERREUR(135)
  688. GOTO 9999
  689. ENDIF
  690. *
  691. * Certaines options ne sont pas nécessaires pour le multigrille
  692. * et sont changées brutalement ici.
  693. *
  694. IF (KTYPI.EQ.7.OR.KTYPI.EQ.8.OR.KTYPI.EQ.10.OR.KTYPI.EQ.11) THEN
  695. KPREC=0
  696. * S'il n'y a pas eu de tentative forte de l'utilisateur de fournir ce
  697. * paramètre.
  698. IF (.NOT.LMRENU) THEN
  699. MRENU='RIEN'
  700. ENDIF
  701. ENDIF
  702. *
  703. * Lorsque la matrice entrée est une rigidité et que l'on n'a pas de
  704. * KCLIM qui a été donné, ni de préconditionneur type ILUT avec pivoting
  705. * (qui impose une modification de la numérotation non encore gérée),
  706. * on va utiliser l'assemblage de RESOU...
  707. *
  708. IF (MRIGID.NE.0.AND.KCLIM.EQ.0.AND.KPREC.NE.7.AND.KPREC.NE.8) THEN
  709. * ...s'il n'y a pas eu de tentative forte de l'utilisateur de fournir ce
  710. * paramètre...et si la matrice ne contient pas simultanément d'inconnues
  711. * normales et de multiplicateurs de Lagrange non reconnus par RESOU (la
  712. * pression)
  713. * Ceux-ci ont un nom commencant par 'LX', mais pas le type 22 pour le
  714. * maillage
  715. IF (.NOT.LMETAS) THEN
  716. LNORMA=.FALSE.
  717. LMUANO=.FALSE.
  718. SEGACT MRIGID
  719. NRIG=COERIG(/1)
  720. DO 10 IRIG=1,NRIG
  721. MELEME=IRIGEL(1,IRIG)
  722. DESCR=IRIGEL(3,IRIG)
  723. SEGACT MELEME
  724. SEGACT DESCR
  725. NLIGRP=LISINC(/2)
  726. IF (ITYPEL.NE.22) THEN
  727. DO ILIGRP=1,NLIGRP
  728. IF (LISINC(ILIGRP)(1:2).EQ.'LX') THEN
  729. LMUANO=.TRUE.
  730. ELSE
  731. LNORMA=.TRUE.
  732. ENDIF
  733. ENDDO
  734. ENDIF
  735. SEGDES MELEME
  736. SEGDES DESCR
  737. IF (LMUANO.AND.LNORMA) GOTO 20
  738. 10 CONTINUE
  739. METASS=6
  740. 20 CONTINUE
  741. SEGDES MRIGID
  742. ENDIF
  743. ENDIF
  744. *
  745. * Impressions de vérification éventuelles
  746. *
  747. IF (IMPR.GT.2) THEN
  748. WRITE(IOIMP,*) 'KRES : following data were read'
  749. WRITE(IOIMP,*) ' Objects :'
  750. WRITE(IOIMP,*) ' MATRIK=',MATRIK,' MATASS=',MATASS,
  751. $ ' MAPREC=',MAPREC,' MRIGID=',MRIGID
  752. WRITE(IOIMP,*) ' MTINV =',MTINV
  753. WRITE(IOIMP,*) ' KCLIM =',KCLIM, ' KSMBR =',KSMBR,
  754. $ ' MCHINI=',MCHINI
  755. WRITE(IOIMP,*) ' General options :'
  756. WRITE(IOIMP,*) ' KTYPI =',KTYPI, ' KPREC =',KPREC
  757. WRITE(IOIMP,*) ' MRENU =',MRENU, ' MMULAG=',MMULAG
  758. WRITE(IOIMP,*) ' ISCAL =',ISCAL, ' INORMU=',INORMU
  759. write(ioimp,*) ' IOUBL =',IOUBL
  760. WRITE(IOIMP,*) ' IMPR =',IMPR, ' IMPINV=',IMPINV
  761. WRITE(IOIMP,*) ' METASS=',METASS,' LTIME =',LTIME
  762. WRITE(IOIMP,*) ' NELIM =',NELIM ,' MLAG1 =',MLAG1
  763. WRITE(IOIMP,*) ' MLAG2 =',MLAG2
  764. WRITE(IOIMP,*) ' Iterative methods :'
  765. WRITE(IOIMP,*) ' ITER =',ITER, ' RESID =',RESID
  766. WRITE(IOIMP,*) ' BRTOL =',BRTOL, ' IRSTRT=',IRSTRT
  767. WRITE(IOIMP,*) ' LBCG =',LBCG, ' ICALRS=',ICALRS
  768. WRITE(IOIMP,*) ' IDDOT =',IDDOT, ' IMVEC =',IMVEC
  769. WRITE(IOIMP,*) ' AGMG :'
  770. WRITE(IOIMP,*) ' IORINC =',IORINC,' LDUMP =',LDUMP
  771. WRITE(IOIMP,*) ' ISMOOT =',ISMOOT
  772. WRITE(IOIMP,*) ' Preconditioners :'
  773. WRITE(IOIMP,*) ' RXMILU=',RXMILU,' XLFIL =',XLFIL
  774. WRITE(IOIMP,*) ' XDTOL =',XDTOL, ' XSPIV =',XSPIV
  775. WRITE(IOIMP,*) ' RXILUP=',RXILUP
  776. ENDIF
  777. *
  778. * Normal termination
  779. *
  780. IRET=0
  781. RETURN
  782. *
  783. * Format handling
  784. *
  785. *
  786. * Error handling
  787. *
  788. 9999 CONTINUE
  789. IRET=1
  790. WRITE(IOIMP,*) 'An error was detected in subroutine prkres'
  791. RETURN
  792. *
  793. * End of subroutine PRKRES
  794. *
  795. END
  796.  
  797.  

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