Télécharger invere.eso

Retour à la liste

Numérotation des lignes :

invere
  1. C INVERE SOURCE GOUNAND 25/10/23 21:15:03 12386
  2. SUBROUTINE INVERE(VP,N,IVP,K,DET)
  3. C******************************************************************************
  4. C INVERSION D'UNE MATRICE NON SYMETRIQUE AVEC RECHERCHE DE PIVOT NON NUL
  5. C SUR UNE COLONNE
  6. C ENTREES
  7. C VP MATRICE A INVERSER
  8. C N ORDRE DE LA MATRICE A INVERSER
  9. C IVP DIMENSION DE LA MATRICE DANS LE PROGRAMME D'APPEL
  10. C K VECTEUR DE TRAVAIL ENTIER DE LONGUEUR N
  11. C SORTIES
  12. C VP MATRICE INVERSEE
  13. C DET DETERMINANT
  14. C SG: 21/10/2025 : recherche du plus grand pivot au lieu du premier
  15. C non nul pour la precision
  16. C******************************************************************************
  17. IMPLICIT INTEGER(I-N)
  18. IMPLICIT REAL*8 (A-H,O-Z)
  19. -INC CCREEL
  20. DIMENSION VP(IVP,IVP),K(N)
  21. DATA UN/1.D0/
  22. C******************************************************************************
  23. DET=UN
  24. DO 5 I=1,N
  25. K(I)=I
  26. 5 CONTINUE
  27. XNORM=XZERO
  28. DO J=1,N
  29. DO I=1,N
  30. XNORM=MAX(XNORM,ABS(VP(I,J)))
  31. ENDDO
  32. ENDDO
  33. XNORM=MAX(XNORM,XPETIT/XZPREC)*10.D0
  34. C****************DEBUT DE L'INVERSION
  35. DO 80 II=1,N
  36. C****************RECHERCHE D'UN PIVOT NON NUL SUR LA COLONNE II
  37. IMAX=II
  38. XMAX=ABS(VP(II,II))
  39. DO 10 I=II+1,N
  40. XCOU=ABS(VP(I,II))
  41. IF(ABS(XCOU).GT.XMAX) THEN
  42. IMAX=I
  43. XMAX=XCOU
  44. ENDIF
  45. 10 CONTINUE
  46. IF(XMAX.GT.XNORM*XZPREC) THEN
  47. I=IMAX
  48. PIV=VP(IMAX,II)
  49. GOTO 20
  50. ENDIF
  51. DET=XZERO
  52. RETURN
  53.  
  54. C****************ECHANGER LA LIGNE II ET LA LIGNE I
  55. 20 CONTINUE
  56. DET=DET*PIV
  57. IF(I.EQ.II) GOTO 40
  58. I1=K(II)
  59. K(II)=K(I)
  60. K(I)=I1
  61. DO 30 J=1,N
  62. C=VP(I,J)
  63. VP(I,J)=VP(II,J)
  64. VP(II,J)=C
  65. 30 CONTINUE
  66. C****************NORMALISATION DE LA LIGNE DU PIVOT
  67. 40 CONTINUE
  68. C=UN/PIV
  69. VP(II,II)=UN
  70. DO 50 J=1,N
  71. VP(II,J)=VP(II,J)*C
  72. 50 CONTINUE
  73. C****************ELIMINATION
  74. DO 70 I=1,N
  75. IF(I.EQ.II) GOTO 70
  76. C=VP(I,II)
  77. VP(I,II)=XZERO
  78. DO 60 J=1,N
  79. VP(I,J)=VP(I,J)-C*VP(II,J)
  80. 60 CONTINUE
  81. 70 CONTINUE
  82. 80 CONTINUE
  83. C****************REORDONNER LES COLONNES DE L'INVERSE
  84. DO 120 J=1,N
  85. C****************CHERCHER J1 TEL QUE K(J1)=J
  86. DO 90 J1=J,N
  87. JJ=K(J1)
  88. IF(JJ.EQ.J) GOTO 100
  89. 90 CONTINUE
  90. 100 CONTINUE
  91. IF(J.EQ.J1) GOTO 120
  92. C****************ECHANGER LES COLONNES J ET J1
  93. K(J1)=K(J)
  94. DO 110 I=1,N
  95. C=VP(I,J)
  96. VP(I,J)=VP(I,J1)
  97. VP(I,J1)=C
  98. 110 CONTINUE
  99. 120 CONTINUE
  100. RETURN
  101. END
  102.  
  103.  

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