Télécharger invrs.eso

Retour à la liste

Numérotation des lignes :

invrs
  1. C INVRS SOURCE PV 05/09/22 21:19:15 5181
  2. SUBROUTINE INVRS(D,IDIM,DINV,DJAC)
  3. C-----------------------------------------------------------------------
  4. C Inversion d'une matrice au plus 3*3.
  5. C-----------------------------------------------------------------------
  6. C
  7. C---------------------------
  8. C Parametres Entree/Sortie :
  9. C---------------------------
  10. C
  11. C E/ D : Matrice a inverser.
  12. C E/ IDIM : Dimension des matrices.
  13. C /S DINV : Matrice inverse.
  14. C /S DJAC : Determinant de D.
  15. C
  16. C XZERO : Contient 0.d0 (cf CCREEL.INC)
  17. C
  18. C-----------------------------------------------------------------------
  19. C
  20. C Langage : FORTRAN77
  21. C
  22. C Auteurs : F.DABBENE 08/93
  23. C
  24. C-----------------------------------------------------------------------
  25. IMPLICIT INTEGER(I-N)
  26. IMPLICIT REAL*8 (A-H,O-Z)
  27. C
  28. -INC CCREEL
  29. C
  30. DIMENSION D(IDIM,*),DINV(IDIM,*)
  31. DATA UN /1.D0/
  32. C
  33. IF (IDIM.EQ.1) THEN
  34. C--------
  35. C CAS 1D
  36. C--------
  37. DJAC = D(1,1)
  38. XXXX = DJAC
  39. IF (DJAC.NE.XZERO) XXXX=UN/DJAC
  40. DINV(1,1) = XXXX
  41. ELSEIF (IDIM.EQ.2) THEN
  42. C--------
  43. C CAS 2D
  44. C--------
  45. DJAC = D(1,1)*D(2,2) - D(2,1)*D(1,2)
  46. XXXX = DJAC
  47. IF (DJAC.NE.XZERO) XXXX=UN/DJAC
  48. DINV(1,1) = D(2,2)*XXXX
  49. DINV(1,2) =-D(1,2)*XXXX
  50. DINV(2,1) =-D(2,1)*XXXX
  51. DINV(2,2) = D(1,1)*XXXX
  52. ELSEIF (IDIM.EQ.3) THEN
  53. C--------
  54. C CAS 3D
  55. C--------
  56. DINV(1,1) = D(2,2)*D(3,3) - D(2,3)*D(3,2)
  57. DINV(2,2) = D(1,1)*D(3,3) - D(1,3)*D(3,1)
  58. DINV(3,3) = D(1,1)*D(2,2) - D(1,2)*D(2,1)
  59. DINV(1,2) =-D(1,2)*D(3,3) + D(3,2)*D(1,3)
  60. DINV(2,1) =-D(2,1)*D(3,3) + D(2,3)*D(3,1)
  61. DINV(1,3) = D(1,2)*D(2,3) - D(2,2)*D(1,3)
  62. DINV(3,1) = D(2,1)*D(3,2) - D(2,2)*D(3,1)
  63. DINV(2,3) =-D(1,1)*D(2,3) + D(2,1)*D(1,3)
  64. DINV(3,2) =-D(1,1)*D(3,2) + D(1,2)*D(3,1)
  65. DJAC = D(1,1)*DINV(1,1) + D(2,1)*DINV(1,2) + D(3,1)*DINV(1,3)
  66. XXXX = DJAC
  67. IF (DJAC.NE.XZERO) XXXX=UN/DJAC
  68. DO 10 IA=1,3
  69. DO 10 IB=1,3
  70. DINV(IA,IB) = DINV(IA,IB)*XXXX
  71. 10 CONTINUE
  72. ELSE
  73. C--------
  74. C AUTRES
  75. C--------
  76. CALL ERREUR(219)
  77. ENDIF
  78. C
  79. RETURN
  80. END
  81.  
  82.  
  83.  
  84.  
  85.  

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