idmat6
C IDMAT6 SOURCE CB215821 16/04/21 21:17:05 8920 & MELEME,IPVAL,NPG2) IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) * ************************************************************************ * * I D M A T 6 * ----------- * * FONCTION: * --------- * * RECUPERATION DES COORDONNEES DES AXES OTHOTROPIE (OU ANISOTROPIE) * * * * * MODULES UTILISES: * ----------------- * -INC SMCOORD -INC PPARAM -INC CCOPTIO -INC CCREEL -INC SMELEME * * PARAMETRES: (E)=ENTREE (S)=SORTIE (+ = CONTENU DANS UN COMMUN) * ----------- * * NUMP1 (E) NUMERO DU POINT P1 ASSOCIE A NUDIR1 * NUMP2 (E) NUMERO DU POINT P2 ASSOCIE A NUDIR1 * NUDIR1 (E) NUMERO DE DIRECTIVE UTILISEE DANS LA LISTE: * "DIRECTION", "RADIAL" * NUDIR2 (E) NUMERO DE DIRECTIVE UTILISEE DANS LA LISTE: * "PARALLELE", "PERPENDIC.", "INCLINE", * POUR LA DEFINITION DES DIRECTIONS D'ORTHOTROPIE. * ANG (E) ANGLE UTILISE DANS LA DEFINITION DES DIRECTIONS * D ORTHOTROPIE (INCLINE) * MELEME (E) POINTEUR DE "MAILLAGE" A 1 SEUL TYPE D'ELEMENT. * XVAL (S) DIRECTIONS D'ORTHOTROPIE PAR ELEMENT, * ON FOURNIT LES COSINUS DIRECTEURS DE L'AXE 1 * EN BIDIM ,ET LES COSINUS DIRECTEURS DES AXES 1 ET * 2 EN TRIDIM,PAR RAPPORT AU REPERE LOCAL DE L'ELEMENT * * * VARIABLES: *----------- * VGLOB1,VGLOB2,VGLOB3 = COS.DIRECTEURS DES AXES 1, 2 ET 3 D'ORTH. PAR * RAPPOT AU REPERE GLOBAL * * * REMARQUES: * ---------- * * LES DIRECTION P1 ET P2 DEFINISSENT LE PLAN QUI CONTIENT LES AXES 1,2 * NUDIR2 =1 SIGNIFIE QUE L'AXE 1 EST PARALLELE A LA DIRECTION P1, * NUDIR2 =2 SIGNIFIE QUE L'AXE 1 EST PERPENDICULAIRE A LA DIRECTION P1, * NUDIR2 =3 SIGNIFIE QUE L'AXE 1 FAIT AN ANGLE DE (ANG) AVEC LA * DIRECTION P1 * * * AUTEUR, DATE DE CREATION: * ------------------------- * * P. DOWLATYARI OCT. 1990 * * LANGAGE: * -------- * FORTRAN 77 + ESOPE * * ************************************************************************ * DIMENSION VGLOB1(3),VGLOB2(3) DIMENSION VPT1(3),VPT2(3) * SEGMENT YVAL REAL*8 VLOC1(IDIM,NPG2,NBELEM) ENDSEGMENT * SEGACT MELEME NBELEM=NUM(/2) * * DIRECTIONS FOURNIES IF (IDIM.EQ.2)THEN * * COORDONNEES DU POINT P1 * * IF(NUDIR1.NE.2) THEN * * NORMALISATION VECT1 * VNORM=SQRT(VPT1(1)*VPT1(1)+VPT1(2)*VPT1(2)) IF (VNORM.EQ.0.) THEN SEGDES,MELEME RETURN ENDIF * VGLOB1(1)=VPT1(1)/VNORM VGLOB1(2)=VPT1(2)/VNORM ENDIF * IF(NUDIR1.EQ.2) THEN VGLOB1(1)=VPT2(1)-VPT1(1) VGLOB1(2)=VPT2(2)-VPT1(2) * * NORMALISATION VECT1 * VNORM=SQRT(VGLOB1(1)*VGLOB1(1)+VGLOB1(2)*VGLOB1(2)) VGLOB1(1)=VGLOB1(1)/VNORM VGLOB1(2)=VGLOB1(2)/VNORM GO TO 15 ENDIF * * IF(NUDIR2.EQ.2)THEN * * ON EFFECTUE UNE ROTATION DE 90 DEGRE AUTOUR DE L'AXE 3 * REEL1=VGLOB1(1) VGLOB1(1)=VGLOB2(1) VGLOB2(1)=-REEL1 REEL1=VGLOB1(2) VGLOB1(2)=VGLOB2(2) VGLOB2(2)=-REEL1 * ELSEIF(NUDIR2.EQ.3)THEN * * ON EFFECTUE UNE ROTATION DE (ANG) DEGRE AUTOUR DE L'AXE 3 * COSA=COS(ANG) SINA=SIN(ANG) REEL1=VGLOB1(1) VGLOB1(1)=VGLOB1(1)*COSA+VGLOB2(1)*SINA VGLOB2(1)=-REEL1*SINA+VGLOB2(1)*COSA REEL1=VGLOB1(2) VGLOB1(2)=VGLOB1(2)*COSA+VGLOB2(2)*SINA VGLOB2(2)=-REEL1*SINA+VGLOB2(2)*COSA ENDIF * ELSEIF(IDIM.EQ.3)THEN * * COORDONNEES DU POINT P1 * * * COORDONNEES DU POINT P2 * * * Verification de la normalité des deux vecteurs donnés * PS = ABS(VPT1(1)*VPT2(1)+VPT1(2)*VPT2(2)+VPT1(3)*VPT2(3)) V1N = SQRT(VPT1(1)*VPT1(1)+VPT1(2)*VPT1(2)+VPT1(3)*VPT1(3)) V2N = SQRT(VPT2(1)*VPT2(1)+VPT2(2)*VPT2(2)+VPT2(3)*VPT2(3)) PS = PS/(V1N*V2N) IF(PS.GT.1D-4) THEN SEGDES,MELEME RETURN ENDIF * IF(NUDIR1.NE.2) THEN * * NORMALISATION VECT1 * VNORM=SQRT(VPT1(1)*VPT1(1)+VPT1(2)*VPT1(2)+ . VPT1(3)*VPT1(3)) IF (VNORM.EQ.0.) THEN SEGDES,MELEME RETURN ENDIF VGLOB1(1)=VPT1(1)/VNORM VGLOB1(2)=VPT1(2)/VNORM VGLOB1(3)=VPT1(3)/VNORM ENDIF * IF(NUDIR1.EQ.2) THEN VGLOB1(1)=VPT2(1)-VPT1(1) VGLOB1(2)=VPT2(2)-VPT1(2) VGLOB1(3)=VPT2(3)-VPT1(3) * * NORMALISATION VECT1 * VNORM=SQRT(VGLOB1(1)*VGLOB1(1)+VGLOB1(2)*VGLOB1(2)+ . VGLOB1(3)*VGLOB1(3)) VGLOB1(1)=VGLOB1(1)/VNORM VGLOB1(2)=VGLOB1(2)/VNORM VGLOB1(3)=VGLOB1(3)/VNORM GO TO 15 ENDIF * * NORMALISATION VECT2 * VNORM2=SQRT(VPT2(1)*VPT2(1)+VPT2(2)*VPT2(2)+ . VPT2(3)*VPT2(3)) IF (VNORM2.EQ.0.) THEN SEGDES,MELEME RETURN ENDIF VGLOB2(1)=VPT2(1)/VNORM2 VGLOB2(2)=VPT2(2)/VNORM2 VGLOB2(3)=VPT2(3)/VNORM2 * IF(NUDIR2.EQ.2)THEN * * ON EFFECTUE UNE ROTATION DE 90 DEGRE AUTOUR DE L'AXE 3 * REEL1=VGLOB1(1) VGLOB1(1)=VGLOB2(1) VGLOB2(1)=-REEL1 REEL1=VGLOB1(2) VGLOB1(2)=VGLOB2(2) VGLOB2(2)=-REEL1 REEL1=VGLOB1(3) VGLOB1(3)=VGLOB2(3) VGLOB2(3)=-REEL1 * ELSEIF(NUDIR2.EQ.3)THEN * * ON EFFECTUE UNE ROTATION DE (ANG) DEGRE AUTOUR DE L'AXE 3 * COSA=COS(ANG) SINA=SIN(ANG) REEL1=VGLOB1(1) VGLOB1(1)=VGLOB1(1)*COSA+VGLOB2(1)*SINA VGLOB2(1)=-REEL1*SINA+VGLOB2(1)*COSA REEL1=VGLOB1(2) VGLOB1(2)=VGLOB1(2)*COSA+VGLOB2(2)*SINA VGLOB2(2)=-REEL1*SINA+VGLOB2(2)*COSA REEL1=VGLOB1(3) VGLOB1(3)=VGLOB1(3)*COSA+VGLOB2(3)*SINA VGLOB2(3)=-REEL1*SINA+VGLOB2(3)*COSA ENDIF ENDIF * * 15 CONTINUE * SEGINI YVAL IPVAL=YVAL * * BOUCLE SUR LES ELEMENTS * DO 10 IEL=1,NBELEM * DO 20 NC=1,IDIM DO 20 NV=1,NPG2 VLOC1(NC,NV,IEL)=0.D0 20 CONTINUE * * ON BOUCLE SUR LES POINTS DE GAUSS * DO 80 IGAU=1,NPG2 IF(IDIM.EQ.2)THEN VLOC1(1,IGAU,IEL)=VLOC1(1,IGAU,IEL)+VGLOB1(1) VLOC1(2,IGAU,IEL)=VLOC1(2,IGAU,IEL)+VGLOB1(2) * ELSEIF(IDIM.EQ.3)THEN DO 40 J=1,3 VLOC1(J,IGAU,IEL)=VLOC1(J,IGAU,IEL)+VGLOB1(J) 40 CONTINUE ENDIF * 80 CONTINUE 10 CONTINUE * * DESACTIVATION DES SEGMENTS * SEGDES,YVAL,MELEME * RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales