Télécharger prbcgg.eso

Retour à la liste

Numérotation des lignes :

prbcgg
  1. C PRBCGG SOURCE GOUNAND 22/08/25 21:15:09 11434
  2. SUBROUTINE PRBCGG(KMORS,KISA,KS2B,MATRIK,MAPREC,LRES,LNMV,INCX,
  3. $ ITER,INMV,RESID,KPREC,
  4. $ BRTOL,LBCG,ICALRS,IDDOT,IMVEC,IMPR,IRET)
  5. IMPLICIT INTEGER(I-N)
  6. IMPLICIT REAL*8 (A-H,O-Z)
  7. C***********************************************************************
  8. C NOM : PRBCGG
  9. C DESCRIPTION :
  10. C Préparation de la résolution d'un système linéaire Ax=b
  11. C par une méthode BiCGSTAB(l) préconditionnée ou non.
  12. C (+ reliable updates)
  13. C LANGAGE : ESOPE
  14. C AUTEUR : Stéphane GOUNAND (CEA/DRN/DMT/SEMT/TTMF)
  15. C mél : gounand@semt2.smts.cea.fr
  16. C REFERENCE (bibtex-like) :
  17. C @BOOK{templates,
  18. C AUTHOR={R.Barrett, M.Berry, T.F.Chan, J.Demmel, J.Donato,
  19. C J.Dongarra, V.Eijkhout, R.Pozo, C.Romine,
  20. C H. Van der Vorst},
  21. C TITLE={Templates for the Solution of Linear Systems :
  22. C Building Blocks for Iterative Methods},
  23. C PUBLISHER={SIAM}, YEAR={1994}, ADDRESS={Philadelphia,PA} }
  24. C -> URL : http://www.netlib.org/templates/Templates.html
  25. C@TechReport{fokkema,
  26. C author = {DR Fokkema},
  27. C title = {Enhanced implementation of BiCGSTAB(l) for solving
  28. C linear systems of equations},
  29. C institution = {?},
  30. C year = {1996}}
  31. C***********************************************************************
  32. C VERSION : v1, 22/02/06, version initiale
  33. C HISTORIQUE : v1, 22/02/06, création
  34. C HISTORIQUE :
  35. C HISTORIQUE :
  36. C***********************************************************************
  37. C Prière de PRENDRE LE TEMPS de compléter les commentaires
  38. C en cas de modification de ce sous-programme afin de faciliter
  39. C la maintenance !
  40. C***********************************************************************
  41. *
  42. * .. Includes et pointeurs associés ..
  43.  
  44. -INC PPARAM
  45. -INC CCOPTIO
  46. -INC SMLREEL
  47. INTEGER JG
  48. POINTEUR LRES.MLREEL
  49. -INC SMLENTI
  50. POINTEUR LNMV.MLENTI
  51. POINTEUR ITRAV.MLENTI
  52. POINTEUR MAPREC.MATRIK
  53. POINTEUR KMORS.PMORS
  54. POINTEUR KISA.IZA
  55. POINTEUR KS2B.IZA
  56. POINTEUR INCX.IZA
  57. POINTEUR INVDIA.IZA
  58. POINTEUR ILUM.PMORS
  59. POINTEUR ILUI.IZA
  60. * .. Work Vectors for BiCGSTAB(l)
  61. SEGMENT SPACE
  62. REAL*8 IJ(NI,NJ)
  63. ENDSEGMENT
  64. POINTEUR IZ.SPACE,IZM1.SPACE
  65. SEGMENT SPACE2
  66. POINTEUR WRK(NIZA).IZA
  67. ENDSEGMENT
  68. POINTEUR IR.SPACE2,IU.SPACE2
  69. POINTEUR IRTLD.IZA,IXTLD.IZA,IUHAT.IZA,IBP.IZA
  70. POINTEUR IY.IZA,IYP.IZA
  71. POINTEUR ITMP.IZA
  72. * .. Scalar Arguments ..
  73. INTEGER ITER, KPREC, IMPR, IRET
  74. REAL*8 RESID
  75. INTEGER NBVA,NJA,NTT,NTTPRE
  76. * .. Executable Statements ..
  77. *
  78. IRET = 0
  79. *
  80. * On récupère les paramètres
  81. *
  82. SEGACT MATRIK
  83. SEGACT MAPREC
  84. IF (KSYM.EQ.0) THEN
  85. IF (IMPR.GT.2) THEN
  86. WRITE(IOIMP,*) 'MATRIK',MATRIK,'symétrique : ',
  87. $ 'use a Conjugate Gradient instead !'
  88. ENDIF
  89. C IRET=-2
  90. C GOTO 9999
  91. ENDIF
  92. * Pour le préconditionneur
  93. ILUM =MAPREC.KIDMAT(6)
  94. ILUI =MAPREC.KIDMAT(7)
  95. IDMAT=MAPREC.KIDMAT(1)
  96. SEGACT IDMAT
  97. INVDIA=IDIAG
  98. SEGDES IDMAT
  99.  
  100. SEGACT KMORS
  101. NTT =KMORS.IA(/1)-1
  102. * NJA =KMORS.JA(/1)
  103. SEGACT KISA
  104. SEGACT KS2B
  105. SEGACT INCX*MOD
  106. C Paramètres des préconditionnements diagonaux et D-ILU
  107. IF (KPREC.NE.0) THEN
  108. IF (KPREC.EQ.1.OR.KPREC.EQ.2) THEN
  109. C Est-il compatible avec la matrice ?
  110. SEGACT INVDIA
  111. NTTPRE=INVDIA.A(/1)
  112. IF (NTTPRE.NE.NTT) THEN
  113. WRITE(IOIMP,*) 'La matrice et son préconditionnement'
  114. WRITE(IOIMP,*) 'ne sont pas compatibles...'
  115. WRITE(IOIMP,*) 'NTT=',NTT
  116. WRITE(IOIMP,*) 'NTTPRE=',NTTPRE
  117. IRET=-2
  118. GOTO 9999
  119. ENDIF
  120. C Paramètres des préconditionnements ILU(0), MILU(0), ILUT et ILUT2
  121. C ilutp, ilutpg, ilutpg2
  122. ELSEIF (KPREC.GE.3.AND.KPREC.LE.10) THEN
  123. SEGACT ILUM
  124. SEGACT ILUI
  125. NTTPRE=ILUM.IA(/1)
  126. IF (NTTPRE.NE.NTT) THEN
  127. WRITE(IOIMP,*) 'La matrice et son préconditionnement',
  128. $ 'ne sont pas compatibles...'
  129. WRITE(IOIMP,*) 'NTT=',NTT,' NTTPRE=',NTTPRE
  130. IRET=-2
  131. GOTO 9999
  132. ENDIF
  133. ENDIF
  134. ENDIF
  135. C
  136. C Initialisation de l'historique de convergence
  137. C
  138. JG=ITER+1
  139. SEGINI LNMV
  140. SEGINI LRES
  141. C
  142. C
  143. C Initialisation des vecteurs de travail pour BiCGStab(l)
  144. C
  145. NI=LBCG
  146. NJ=LBCG
  147. SEGINI IZ,IZM1
  148. NBVA=LBCG
  149. SEGINI IY,IYP
  150. JG=LBCG
  151. SEGINI ITRAV
  152. NBVA=NTT
  153. SEGINI IRTLD,IXTLD,IUHAT,IBP
  154. NIZA=LBCG+1
  155. SEGINI IR
  156. DO I=1,NIZA
  157. SEGINI ITMP
  158. IR.WRK(I)=ITMP
  159. ENDDO
  160. SEGINI IU
  161. DO I=1,NIZA
  162. SEGINI ITMP
  163. IU.WRK(I)=ITMP
  164. ENDDO
  165. C
  166. CALL BCGG(KMORS,KISA,KS2B,INCX,
  167. $ KPREC,INVDIA,ILUM,ILUI,
  168. $ LRES,LNMV,
  169. $ IRTLD,IXTLD,IUHAT,IR,IU,IZ,IZM1,IY,IYP,IBP,ITRAV,
  170. $ ITER,INMV,BRTOL,LBCG,RESID,ICALRS,IDDOT,IMVEC,IMPR,IRET)
  171. * Gestion du CTRL-C
  172. if (ierr.NE.0) return
  173. C
  174. C Désactivation-suppression
  175. C
  176. DO I=1,NIZA
  177. ITMP=IU.WRK(I)
  178. SEGSUP ITMP
  179. ENDDO
  180. SEGSUP IU
  181. DO I=1,NIZA
  182. ITMP=IR.WRK(I)
  183. SEGSUP ITMP
  184. ENDDO
  185. SEGSUP IR
  186. SEGSUP IRTLD,IXTLD,IUHAT,IBP
  187. SEGSUP ITRAV
  188. SEGSUP IY,IYP
  189. SEGSUP IZ,IZM1
  190. JG=ITER+1
  191. SEGADJ LRES
  192. SEGDES LRES
  193. SEGADJ LNMV
  194. SEGDES LNMV
  195. IF (KPREC.EQ.1.OR.KPREC.EQ.2) THEN
  196. SEGDES INVDIA
  197. ELSEIF (KPREC.GE.3.AND.KPREC.LE.9) THEN
  198. SEGDES ILUI
  199. SEGDES ILUM
  200. ENDIF
  201. SEGDES INCX
  202. SEGDES KS2B
  203. SEGDES KISA
  204. SEGDES KMORS
  205. SEGDES MAPREC
  206. SEGDES MATRIK
  207. C
  208. C A problem has occured in the GMRES method
  209. C
  210. IF (IRET.LT.0) GOTO 9999
  211. *
  212. * Normal termination
  213. *
  214. RETURN
  215. *
  216. * Format handling
  217. *
  218. *
  219. * Error handling
  220. *
  221. 9999 CONTINUE
  222. WRITE(IOIMP,*) 'An error was detected in prbcgg.eso'
  223. RETURN
  224. *
  225. * End of prbcgg
  226. *
  227. END
  228.  
  229.  

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