Télécharger prcgsn.eso

Retour à la liste

Numérotation des lignes :

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

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