Télécharger epsln2.eso

Retour à la liste

Numérotation des lignes :

epsln2
  1. C EPSLN2 SOURCE FANDEUR 12/03/15 21:24:18 7312
  2.  
  3. SUBROUTINE EPSLN2(F,EPS,N)
  4.  
  5. IMPLICIT INTEGER(I-N)
  6. IMPLICIT REAL*8(A-H,O-Z)
  7.  
  8.  
  9. -INC PPARAM
  10. -INC CCOPTIO
  11.  
  12. DIMENSION F(*),EPS(*)
  13. DIMENSION C(3,3),S(3,3),D(3)
  14. *
  15. * Affichage du gradient de la transformation
  16. *
  17. IF (IIMPI.EQ.199) THEN
  18. WRITE(IOIMP,7771) N
  19. 7771 FORMAT(2X,'EPSLN2 - N=',I3/)
  20. N2=N*N
  21. WRITE(IOIMP,7772) (F(I),I=1,N2)
  22. 7772 FORMAT(2X,'F '/(3(1X,1PE12.5)))
  23. ENDIF
  24. *
  25. * REMPLISSAGE DE C = Ftrans.F
  26. *
  27. CALL ZERO(C,3,3)
  28. DO 1 I=1,N
  29. DO 1 J=1,N
  30. r_z=0.D0
  31. DO K=0,N-1
  32. KN=K*N
  33. r_z=r_z+F(KN+I)*F(KN+J)
  34. ENDDO
  35. C(I,J)=r_z
  36. 1 CONTINUE
  37. *
  38. IF (IIMPI.EQ.199) THEN
  39. WRITE(IOIMP,7702) ((C(I,J),J=1,N),I=1,N)
  40. ENDIF
  41. *
  42. * PETITE VERIFICATION DE LA SYMETRIE DE C
  43. *
  44. TOL=1.D-10
  45. DO 11 I=2,N
  46. DO 11 J=1,I-1
  47. IF(ABS(C(I,J)-C(J,I)).GE.TOL) THEN
  48. CALL ERREUR(26)
  49. RETURN
  50. ENDIF
  51. 11 CONTINUE
  52.  
  53. C*AV DO I=1,N
  54. C*AV C(I,I)=C(I,I) - 1.D0
  55. C*AV ENDDO
  56. *
  57. * Calcul des valeurs propres de C et des vecteurs propres
  58. *
  59. NLOC = N
  60. C* En modes 2D PLAN ou 2D AXI, on travaille sur une matrice 2x2 mais
  61. C* on verifie la nullite des termes en C(3,i), i = 1 a 2
  62. IF (IFOUR.LE.0) THEN
  63. IF (N.EQ.3) THEN
  64. NLOC = 2
  65. IF (ABS(C(3,1)+C(1,3)).GE.TOL) THEN
  66. CALL ERREUR(26)
  67. RETURN
  68. ELSE IF (ABS(C(3,2)+C(2,3)).GE.TOL) THEN
  69. CALL ERREUR(26)
  70. RETURN
  71. ENDIF
  72. ENDIF
  73. ENDIF
  74.  
  75. CALL JACOB3(C,NLOC,D,S)
  76.  
  77. IF (IIMPI.EQ.199) THEN
  78. WRITE(IOIMP,7701) (D(K),K=1,N)
  79. ENDIF
  80. *
  81. * Calcul de ln(U) = 1/2 ln(C) (valeurs propres)
  82. *
  83. DO 2 I=1,N
  84. D(I) = 0.5D0*LOG(D(I))
  85. C*AV D(I) = 0.5D0*LOG(1.D0+D(I))
  86. 2 CONTINUE
  87. *
  88. DO 3 I=1,N
  89. DO 3 J=1,N
  90. r_z=0.D0
  91. DO 31 K=1,N
  92. r_z = r_z + S(I,K)*D(K)*S(J,K)
  93. 31 CONTINUE
  94. C(I,J)=r_z
  95. 3 CONTINUE
  96. *
  97. IF(IIMPI.EQ.199) THEN
  98. WRITE(IOIMP,7701) (D(K),K=1,N)
  99. 7701 FORMAT(2X,' D '/(6(1X,1PE12.5)))
  100. WRITE(IOIMP,7702) ((C(I,J),J=1,N),I=1,N)
  101. 7702 FORMAT(2X,' C '/(3(1X,1PE12.5)))
  102. ENDIF
  103. *
  104. * RANGEMENT DANS EPS
  105. *
  106. IF (N.EQ.2) THEN
  107. EPS(1)=C(1,1)
  108. EPS(2)=C(2,2)
  109. EPS(3)=C(2,1)+C(1,2)
  110. EPS(4)=0.D0
  111. EPS(5)=0.D0
  112. EPS(6)=0.D0
  113. *
  114. ELSE IF (N.EQ.3) THEN
  115. *
  116. IF (IFOUR.EQ.1.OR.IFOUR.EQ.2) THEN
  117. EPS(1)=C(1,1)
  118. EPS(2)=C(2,2)
  119. EPS(3)=C(3,3)
  120. EPS(4)=C(2,1)+C(1,2)
  121. EPS(5)=C(3,1)+C(1,3)
  122. EPS(6)=C(3,2)+C(2,3)
  123. ELSE IF (IFOUR.EQ.0.OR.IFOUR.EQ.-2.OR.IFOUR.EQ.-3) THEN
  124. EPS(1)=C(1,1)
  125. EPS(2)=C(2,2)
  126. EPS(3)=C(3,3)
  127. EPS(4)=C(2,1)+C(1,2)
  128. EPS(5)=0.D0
  129. EPS(6)=0.D0
  130. ELSE IF (IFOUR.EQ.-1) THEN
  131. IF (ABS(C(3,3)).GE.TOL) THEN
  132. CALL ERREUR(26)
  133. RETURN
  134. ENDIF
  135. EPS(1)=C(1,1)
  136. EPS(2)=C(2,2)
  137. EPS(3)=0.D0
  138. EPS(4)=C(2,1)+C(1,2)
  139. EPS(5)=0.D0
  140. EPS(6)=0.D0
  141. * Modes de calcul 1D
  142. ELSE IF (IFOUR.GE.3.AND.IFOUR.LE.15) THEN
  143. EPS(1)=C(1,1)
  144. IF (IFOUR.EQ.3) THEN
  145. IF (ABS(C(2,2)).GE.TOL.OR.ABS(C(3,3)).GE.TOL) THEN
  146. CALL ERREUR(26)
  147. RETURN
  148. ENDIF
  149. EPS(2)=0.D0
  150. EPS(3)=0.D0
  151. ELSE IF (IFOUR.EQ.5.OR.IFOUR.EQ.7) THEN
  152. IF (ABS(C(3,3)).GE.TOL) THEN
  153. CALL ERREUR(26)
  154. RETURN
  155. ENDIF
  156. EPS(2)=C(2,2)
  157. EPS(3)=0.D0
  158. ELSE IF (IFOUR.EQ.4.OR.IFOUR.EQ.9.OR.IFOUR.EQ.12) THEN
  159. IF (ABS(C(2,2)).GE.TOL) THEN
  160. CALL ERREUR(26)
  161. RETURN
  162. ENDIF
  163. EPS(2)=0.D0
  164. EPS(3)=C(3,3)
  165. ELSE
  166. EPS(2)=C(2,2)
  167. EPS(3)=C(3,3)
  168. ENDIF
  169. EPS(4)=0.D0
  170. EPS(5)=0.D0
  171. EPS(6)=0.D0
  172. ELSE
  173. CALL ERREUR(19)
  174. ENDIF
  175. *
  176. ELSE
  177. CALL ERREUR(19)
  178. ENDIF
  179. *
  180. IF (IIMPI.EQ.199) THEN
  181. WRITE(IOIMP,7730) (EPS(K),K=1,6)
  182. 7730 FORMAT(2X,'EPSLN2- EPS '/(3(1X,1PE12.5)))
  183. ENDIF
  184. *
  185. RETURN
  186. END
  187.  
  188.  
  189.  

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