Download epsln2.eso

Back to the list

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

© Cast3M 2003 - All rights reserved.
Disclaimer