Télécharger valpr2.eso

Retour à la liste

Numérotation des lignes :

valpr2
  1. C VALPR2 SOURCE CHAT 09/11/25 21:15:32 6548
  2. SUBROUTINE VALPR2 (DIAG,NTERME,SSDIAG,NBITER,PRECI1,PRECI2)
  3. implicit real*8(a-H,o-Z)
  4. ************************************************************************
  5. *
  6. * V A L P R 2
  7. * -----------
  8. *
  9. * FONCTION:
  10. * ---------
  11. *
  12. * CALCULER LES VALEURS PROPRES D'UNE MATRICE TRIDIAGONALE DE LA
  13. * FORME:
  14. *
  15. * | A1 1 0 0 0 0 |
  16. * | B1 A2 1 0 0 0 |
  17. * | 0 B2 A3 1 0 0 |
  18. * | 0 0 B3 A4 1 0 |
  19. * | 0 0 0 B4 A5 1 |
  20. * | 0 0 0 0 B5 A6 |
  21. *
  22. * PAR "ITERATIONS L.R"
  23. *
  24. * MODE D'APPEL:
  25. * -------------
  26. *
  27. * CALL VALPR2 (DIAG,NTERME,SSDIAG,NBITER,PRECI1,PRECI2)
  28. *
  29. * PARAMETRES: (E)=ENTREE (S)=SORTIE
  30. * -----------
  31. *
  32. * DIAG REEL DP (E) LISTE DES TERMES DIAGONAUX DE LA MATRICE.
  33. * (S) LISTE DES VALEURS PROPRES DE LA MATRICE.
  34. * NTERME ENTIER (E) DIMENSION DE LA MATRICE (CARREE).
  35. * SSDIAG REEL DP (E) LISTE DES TERMES DE LA SOUS-DIAGONALE DE LA
  36. * MATRICE.
  37. * (S) LA LISTE D'ENTREE EST DETRUITE. ON TROUVE A
  38. * LA PLACE LES NOMBRES QUI ONT ETE COMPARES A
  39. * "0" DANS LE TEST DE CONVERGENCE, POUR
  40. * CHAQUE VALEUR PROPRE.
  41. * NBITER ENTIER (E) NOMBRE D'ITERATIONS PERMISES PAR VALEUR
  42. * PROPRE.
  43. * PRECI1 REEL DP (E) PRECISION ABSOLUE DE CONVERGENCE.
  44. * = 0 SI LE TEST DOIT SE FAIRE AVEC "PRECI2"
  45. * PRECI2 REEL DP (E) PRECISION RELATIVE DE CONVERGENCE.
  46. * = 0 SI LE TEST DOIT SE FAIRE AVEC "PRECI1"
  47. *
  48. * LEXIQUE: (ORDRE ALPHABETIQUE)
  49. * --------
  50. *
  51. * DIAG REEL DP CONTIENT ALTERNATIVEMENT LES TERMES DIAGONAUX DE
  52. * "T" ET LES TERMES DIAGONAUX DE "R".
  53. * NRESTE ENTIER DIMENSION DE LA MATRICE TRIDIAGONALE EXTRAITE
  54. * (DEFINIE AU PARAGRAPHE "MODE DE FONCTIONNEMENT")
  55. * SSDIAG REEL DP CONTIENT ALTERNATIVEMENT LES TERMES
  56. * SOUS-DIAGONAUX DE "T" ET CEUX DE "L".
  57. *
  58. * LES NOTATIONS "T", "R" ET "L" SONT DEFINIES AU PARAGRAPHE "MODE DE
  59. * FONCTIONNEMENT".
  60. *
  61. * MODE DE FONCTIONNEMENT:
  62. * -----------------------
  63. *
  64. * PRINCIPE DES "ITERATIONS L.R":
  65. *
  66. * EN REPETANT LES OPERATIONS DE DECOMPOSITION DE "T" (MATRICE
  67. * TRIDIAGONALE) EN PRODUIT "L.R" ("L" MATRICE TRIANGULAIRE
  68. * INFERIEURE UNITAIRE ET "R" MATRICE TRIANGULAIRE SUPERIEURE) ET DE
  69. * RECOMBINAISON DE "R" ET "L" EN "T = R.L" (NOUVELLE MATRICE
  70. * TRIDIAGONALE), ON ARRIVE A UNE MATRICE "L" UNITAIRE ET DES
  71. * MATRICES "T" ET "R" CONTENANT LES VALEURS PROPRES SUR LA
  72. * DIAGONALE.
  73. *
  74. * DANS LE CAS PARTICULIER D'UNE MATRICE "T" TRIDIAGONALE, LES
  75. * MATRICES "L" ET "R" ONT LES FORMES PARTICULIERES SUIVANTES:
  76. *
  77. * | 1 0 0 0 0 0 | | R1 1 0 0 0 0 |
  78. * | L1 1 0 0 0 0 | | 0 R2 1 0 0 0 |
  79. * "L" = | 0 L2 1 0 0 0 | "R" = | 0 0 R3 1 0 0 |
  80. * | 0 0 L3 1 0 0 | | 0 0 0 R4 1 0 |
  81. * | 0 0 0 L4 1 0 | | 0 0 0 0 R5 1 |
  82. * | 0 0 0 0 L5 1 | | 0 0 0 0 0 R6 |
  83. *
  84. * ET LES DECOMPOSITIONS ET RECOMBINAISONS PRENNENT UNE FORME TRES
  85. * SIMPLE.
  86. *
  87. * PAR LA TECHNIQUE DU DECALAGE, ON PROVOQUE LA CONVERGENCE DU
  88. * DERNIER TERME DIAGONAL DE "T" EN PREMIER.
  89. * APRES CHAQUE CONVERGENCE, ON CONSIDERE UNE NOUVELLE MATRICE "T"
  90. * EXTRAITE DE LA PRECEDENTE EN ENLEVANT LA DERNIERE LIGNE ET LA
  91. * DERNIERE COLONNE.
  92. *
  93. * AUTEUR, DATE DE CREATION:
  94. * -------------------------
  95. *
  96. * PASCAL MANIGOT 27 FEVRIER 1985
  97. *
  98. * LANGAGE:
  99. * --------
  100. *
  101. * FORTRAN77
  102. *
  103. ************************************************************************
  104. *
  105. ** RQ: PROBLEME NON REGLE: TERME DIAGONAL NUL ET TEST DE CONVERGENCE
  106. ** SUR DES VALEURS RELATIVES.
  107. *
  108. IMPLICIT INTEGER(I-N)
  109. REAL*8 DIAG(*),SSDIAG(*),PRECI1,PRECI2
  110. REAL*8 SOMDEC,DEC,DD
  111. *
  112. LOGICAL CONVRG
  113. *
  114. * write(6,*) ' entreee dans valpr2 nterme',nterme
  115. * write(6,*) ' diag(nterme-1),ssdiag(nterme-1)'
  116. * write(6,*) diag(nterme-1),ssdiag(nterme-1)
  117. * write(6,*) ' diag ', ( diag(iou),iou=1,nterme)
  118. * write(6,*) ' ssdiag ',( ssdiag(iou),iou=1,nterme)
  119. DO 100 IB100=1,(NTERME-1)
  120. *
  121. NREST1 = NTERME - IB100
  122. NRESTE = NREST1 + 1
  123. SOMDEC = 0.D0
  124. *
  125. DO 110 IB110=1,NBITER
  126. *
  127. * DECOMPOSITION: "T" --> "L.R"
  128. DO 120 IB=2,NRESTE
  129. IBM1 = IB - 1
  130. if(diag(ibm1).eq.0.D0) then
  131. write(6,*) ' ib110 ib ', ib110,ib
  132. endif
  133. SSDIAG(IBM1) = SSDIAG(IBM1)/DIAG(IBM1)
  134. DIAG(IB) = DIAG(IB) - SSDIAG(IBM1)
  135. 120 CONTINUE
  136. * END DO
  137. *
  138. * RECOMBINAISON: "R.L" --> "T"
  139. DO 130 IB=1,NREST1
  140. DIAG(IB) = DIAG(IB) + SSDIAG(IB)
  141. SSDIAG(IB) = SSDIAG(IB) * DIAG(IB+1)
  142. 130 CONTINUE
  143. * END DO
  144. *
  145. IF (PRECI1 .LE. 0.D0) THEN
  146. * TEST RELATIF:
  147. DD = DIAG(NRESTE) + SOMDEC
  148. CONVRG = ABS(SSDIAG(NREST1)) .LT. ABS(DD * PRECI2)
  149. ELSE
  150. * "PRECI2" VAUT "0."
  151. * TEST ABSOLU:
  152. CONVRG = ABS(SSDIAG(NREST1)) .LT. PRECI1
  153. END IF
  154. *
  155. IF (CONVRG) THEN
  156. * --> SORTIE DE BOUCLE N.110
  157. GOTO 112
  158. END IF
  159. *
  160. DEC = DIAG(NRESTE)
  161. SOMDEC = SOMDEC + DEC
  162. *
  163. * DECALAGE:
  164. DO 140 IB140=1,NRESTE
  165. DIAG(IB140) = DIAG(IB140) - DEC
  166. 140 CONTINUE
  167. * END DO
  168. *
  169. 110 CONTINUE
  170. write(6,*)'on a pas convergé dans les ',nbiter,' iterations'
  171. write(6,*)' ib100 = ' , ib100
  172. * END DO
  173. 112 CONTINUE
  174. *
  175. DO 150 IB=1,NRESTE
  176. DIAG(IB) = DIAG(IB) + SOMDEC
  177. 150 CONTINUE
  178. * END DO
  179. *
  180. 100 CONTINUE
  181.  
  182. * END DO
  183. *
  184. * RQ: LES VALEURS PROPRES SONT DANS "DIAG".
  185. *
  186. END
  187.  
  188.  
  189.  

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