1 : C IDMAT6 SOURCE STRU 12/03/15 21:26:13 7319 2 : SUBROUTINE IDMAT6 (NUMP1,NUMP2,NUDIR1,NUDIR2,ANG, 3 : & MELEME,IPVAL,NPG2) 4 : IMPLICIT INTEGER(I-N) 5 : IMPLICIT REAL*8(A-H,O-Z) 6 : * 7 : ************************************************************************ 8 : * 9 : * I D M A T 6 10 : * ----------- 11 : * 12 : * FONCTION: 13 : * --------- 14 : * 15 : * RECUPERATION DES COORDONNEES DES AXES OTHOTROPIE (OU ANISOTROPIE) 16 : * 17 : * 18 : * 19 : * 20 : * MODULES UTILISES: 21 : * ----------------- 22 : * 23 : -INC SMCOORD 24 : -INC CCOPTIO 25 : -INC CCREEL 26 : -INC SMELEME 27 : * 28 : * PARAMETRES: (E)=ENTREE (S)=SORTIE (+ = CONTENU DANS UN COMMUN) 29 : * ----------- 30 : * 31 : * NUMP1 (E) NUMERO DU POINT P1 ASSOCIE A NUDIR1 32 : * NUMP2 (E) NUMERO DU POINT P2 ASSOCIE A NUDIR1 33 : * NUDIR1 (E) NUMERO DE DIRECTIVE UTILISEE DANS LA LISTE: 34 : * "DIRECTION", "RADIAL" 35 : * NUDIR2 (E) NUMERO DE DIRECTIVE UTILISEE DANS LA LISTE: 36 : * "PARALLELE", "PERPENDIC.", "INCLINE", 37 : * POUR LA DEFINITION DES DIRECTIONS D'ORTHOTROPIE. 38 : * ANG (E) ANGLE UTILISE DANS LA DEFINITION DES DIRECTIONS 39 : * D ORTHOTROPIE (INCLINE) 40 : * MELEME (E) POINTEUR DE "MAILLAGE" A 1 SEUL TYPE D'ELEMENT. 41 : * XVAL (S) DIRECTIONS D'ORTHOTROPIE PAR ELEMENT, 42 : * ON FOURNIT LES COSINUS DIRECTEURS DE L'AXE 1 43 : * EN BIDIM ,ET LES COSINUS DIRECTEURS DES AXES 1 ET 44 : * 2 EN TRIDIM,PAR RAPPORT AU REPERE LOCAL DE L'ELEMENT 45 : * 46 : * 47 : * VARIABLES: 48 : *----------- 49 : * VGLOB1,VGLOB2,VGLOB3 = COS.DIRECTEURS DES AXES 1, 2 ET 3 D'ORTH. PAR 50 : * RAPPOT AU REPERE GLOBAL 51 : * 52 : * 53 : * REMARQUES: 54 : * ---------- 55 : * 56 : * LES DIRECTION P1 ET P2 DEFINISSENT LE PLAN QUI CONTIENT LES AXES 1,2 57 : * NUDIR2 =1 SIGNIFIE QUE L'AXE 1 EST PARALLELE A LA DIRECTION P1, 58 : * NUDIR2 =2 SIGNIFIE QUE L'AXE 1 EST PERPENDICULAIRE A LA DIRECTION P1, 59 : * NUDIR2 =3 SIGNIFIE QUE L'AXE 1 FAIT AN ANGLE DE (ANG) AVEC LA 60 : * DIRECTION P1 61 : * 62 : * 63 : * AUTEUR, DATE DE CREATION: 64 : * ------------------------- 65 : * 66 : * P. DOWLATYARI OCT. 1990 67 : * 68 : * LANGAGE: 69 : * -------- 70 : * FORTRAN 77 + ESOPE 71 : * 72 : * 73 : ************************************************************************ 74 : * 75 : * 76 : DIMENSION VGLOB1(3),VGLOB2(3) 77 : DIMENSION VPT1(3),VPT2(3) 78 : * 79 : SEGACT MELEME 80 : NBELEM=NUM(/2) 81 : * 82 : SEGMENT YVAL 83 : REAL*8 VLOC1(IDIM,NPG2,NBELEM) 84 : REAL*8 VLOC2(IDIM,NPG2,NBELEM) 85 : ENDSEGMENT 86 : * 87 : * 88 : * DIRECTIONS FOURNIES 89 : IF (IDIM.EQ.2)THEN 90 : * 91 : * COORDONNEES DU POINT P1 92 : * 92 : CALL EXCOO1 (NUMP1,VPT1(1),VPT1(2),VPT1(3),REEL1) 93 : * 94 : IF(NUDIR1.NE.2) THEN 95 : * 96 : * NORMALISATION VECT1 97 : * 98 : VNORM=DSQRT(VPT1(1)*VPT1(1)+VPT1(2)*VPT1(2)) 99 : IF (VNORM.EQ.0.) THEN 99 : CALL ERREUR (524) 100 : SEGDES,MELEME 101 : RETURN 102 : ENDIF 103 : * 104 : VGLOB1(1)=VPT1(1)/VNORM 105 : VGLOB1(2)=VPT1(2)/VNORM 106 : ENDIF 107 : * 108 : IF(NUDIR1.EQ.2) THEN 109 : VGLOB1(1)=VPT2(1)-VPT1(1) 110 : VGLOB1(2)=VPT2(2)-VPT1(2) 111 : * 112 : * NORMALISATION VECT1 113 : * 114 : VNORM=DSQRT(VGLOB1(1)*VGLOB1(1)+VGLOB1(2)*VGLOB1(2)) 115 : VGLOB1(1)=VGLOB1(1)/VNORM 116 : VGLOB1(2)=VGLOB1(2)/VNORM 117 : GO TO 15 118 : ENDIF 119 : * 120 : * 121 : IF(NUDIR2.EQ.2)THEN 122 : * 123 : * ON EFFECTUE UNE ROTATION DE 90 DEGRE AUTOUR DE L'AXE 3 124 : * 125 : REEL1=VGLOB1(1) 126 : VGLOB1(1)=VGLOB2(1) 127 : VGLOB2(1)=-REEL1 128 : REEL1=VGLOB1(2) 129 : VGLOB1(2)=VGLOB2(2) 130 : VGLOB2(2)=-REEL1 131 : * 132 : ELSEIF(NUDIR2.EQ.3)THEN 133 : * 134 : * ON EFFECTUE UNE ROTATION DE (ANG) DEGRE AUTOUR DE L'AXE 3 135 : * 136 : COSA=DCOS(ANG) 137 : SINA=DSIN(ANG) 138 : REEL1=VGLOB1(1) 139 : VGLOB1(1)=VGLOB1(1)*COSA+VGLOB2(1)*SINA 140 : VGLOB2(1)=-REEL1*SINA+VGLOB2(1)*COSA 141 : REEL1=VGLOB1(2) 142 : VGLOB1(2)=VGLOB1(2)*COSA+VGLOB2(2)*SINA 143 : VGLOB2(2)=-REEL1*SINA+VGLOB2(2)*COSA 144 : ENDIF 145 : * 146 : * 147 : * 148 : ELSEIF(IDIM.EQ.3)THEN 149 : * 150 : * COORDONNEES DU POINT P1 151 : * 151 : CALL EXCOO1 (NUMP1,VPT1(1),VPT1(2),VPT1(3),REEL1) 152 : * 153 : * COORDONNEES DU POINT P2 154 : * 154 : CALL EXCOO1 (NUMP2,VPT2(1),VPT2(2),VPT2(3),REEL1) 155 : * 156 : * Verification de la normalité des deux vecteurs donnés 157 : * 158 : PS = DABS(VPT1(1)*VPT2(1)+VPT1(2)*VPT2(2)+VPT1(3)*VPT2(3)) 159 : V1N = DSQRT(VPT1(1)*VPT1(1)+VPT1(2)*VPT1(2)+VPT1(3)*VPT1(3)) 160 : V2N = DSQRT(VPT2(1)*VPT2(1)+VPT2(2)*VPT2(2)+VPT2(3)*VPT2(3)) 161 : PS = PS/(V1N*V2N) 162 : IF(PS.GT.1D-4) THEN 162 : CALL ERREUR (524) 163 : SEGDES,MELEME 164 : RETURN 165 : ENDIF 166 : * 167 : IF(NUDIR1.NE.2) THEN 168 : * 169 : * NORMALISATION VECT1 170 : * 171 : VNORM=DSQRT(VPT1(1)*VPT1(1)+VPT1(2)*VPT1(2)+ 172 : . VPT1(3)*VPT1(3)) 173 : IF (VNORM.EQ.0.) THEN 173 : CALL ERREUR (524) 174 : SEGDES,MELEME 175 : RETURN 176 : ENDIF 177 : VGLOB1(1)=VPT1(1)/VNORM 178 : VGLOB1(2)=VPT1(2)/VNORM 179 : VGLOB1(3)=VPT1(3)/VNORM 180 : ENDIF 181 : * 182 : IF(NUDIR1.EQ.2) THEN 183 : VGLOB1(1)=VPT2(1)-VPT1(1) 184 : VGLOB1(2)=VPT2(2)-VPT1(2) 185 : VGLOB1(3)=VPT2(3)-VPT1(3) 186 : * 187 : * NORMALISATION VECT1 188 : * 189 : VNORM=DSQRT(VGLOB1(1)*VGLOB1(1)+VGLOB1(2)*VGLOB1(2)+ 190 : . VGLOB1(3)*VGLOB1(3)) 191 : VGLOB1(1)=VGLOB1(1)/VNORM 192 : VGLOB1(2)=VGLOB1(2)/VNORM 193 : VGLOB1(3)=VGLOB1(3)/VNORM 194 : GO TO 15 195 : ENDIF 196 : * 197 : * NORMALISATION VECT2 198 : * 199 : VNORM2=DSQRT(VPT2(1)*VPT2(1)+VPT2(2)*VPT2(2)+ 200 : . VPT2(3)*VPT2(3)) 201 : IF (VNORM2.EQ.0.) THEN 201 : CALL ERREUR (524) 202 : SEGDES,MELEME 203 : RETURN 204 : ENDIF 205 : VGLOB2(1)=VPT2(1)/VNORM2 206 : VGLOB2(2)=VPT2(2)/VNORM2 207 : VGLOB2(3)=VPT2(3)/VNORM2 208 : * 209 : * 210 : * 211 : IF(NUDIR2.EQ.2)THEN 212 : * 213 : * ON EFFECTUE UNE ROTATION DE 90 DEGRE AUTOUR DE L'AXE 3 214 : * 215 : REEL1=VGLOB1(1) 216 : VGLOB1(1)=VGLOB2(1) 217 : VGLOB2(1)=-REEL1 218 : REEL1=VGLOB1(2) 219 : VGLOB1(2)=VGLOB2(2) 220 : VGLOB2(2)=-REEL1 221 : REEL1=VGLOB1(3) 222 : VGLOB1(3)=VGLOB2(3) 223 : VGLOB2(3)=-REEL1 224 : * 225 : ELSEIF(NUDIR2.EQ.3)THEN 226 : * 227 : * ON EFFECTUE UNE ROTATION DE (ANG) DEGRE AUTOUR DE L'AXE 3 228 : * 229 : COSA=DCOS(ANG) 230 : SINA=DSIN(ANG) 231 : REEL1=VGLOB1(1) 232 : VGLOB1(1)=VGLOB1(1)*COSA+VGLOB2(1)*SINA 233 : VGLOB2(1)=-REEL1*SINA+VGLOB2(1)*COSA 234 : REEL1=VGLOB1(2) 235 : VGLOB1(2)=VGLOB1(2)*COSA+VGLOB2(2)*SINA 236 : VGLOB2(2)=-REEL1*SINA+VGLOB2(2)*COSA 237 : REEL1=VGLOB1(3) 238 : VGLOB1(3)=VGLOB1(3)*COSA+VGLOB2(3)*SINA 239 : VGLOB2(3)=-REEL1*SINA+VGLOB2(3)*COSA 240 : ENDIF 241 : ENDIF 242 : * 243 : * 244 : 15 CONTINUE 245 : * 246 : SEGINI YVAL 247 : IPVAL=YVAL 248 : * 249 : * BOUCLE SUR LES ELEMENTS 250 : * 251 : DO 10 IEL=1,NBELEM 252 : * 253 : DO 20 NC=1,IDIM 254 : DO 20 NV=1,NPG2 255 : VLOC1(NC,NV,IEL)=0.D0 256 : VLOC2(NC,NV,IEL)=0.D0 257 : 20 CONTINUE 258 : * 259 : * ON BOUCLE SUR LES POINTS DE GAUSS 260 : * 261 : DO 80 IGAU=1,NPG2 262 : IF(IDIM.EQ.2)THEN 263 : VLOC1(1,IGAU,IEL)=VLOC1(1,IGAU,IEL)+VGLOB1(1) 264 : VLOC1(2,IGAU,IEL)=VLOC1(2,IGAU,IEL)+VGLOB1(2) 265 : * 266 : ELSEIF(IDIM.EQ.3)THEN 267 : DO 40 J=1,3 268 : VLOC1(J,IGAU,IEL)=VLOC1(J,IGAU,IEL)+VGLOB1(J) 269 : VLOC2(J,IGAU,IEL)=VLOC2(J,IGAU,IEL)+VGLOB2(J) 270 : 40 CONTINUE 271 : ENDIF 272 : * 273 : 80 CONTINUE 274 : 10 CONTINUE 275 : * 276 : * DESACTIVATION DES SEGMENTS 277 : * 278 : SEGDES,YVAL,MELEME 279 : * 280 : RETURN 281 : END 282 : 283 : 284 : 285 : 286 : 287 : 288 : 289 : 290 : 291 :
© Cast3M 2003 - All rights reserved.
Disclaimer