Télécharger epsln2.eso

Retour à la liste

Numérotation des lignes :

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

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