idmat4
C IDMAT4 SOURCE BP208322 17/03/01 21:17:40 9325 . MELEME,MINTE,IPVAL,NPG2,MINTE2) IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) * ************************************************************************ * * I D M A T 4 * ----------- * * FONCTION: * --------- * * CALCUL DES COS-DIR. DES AXES ORTH. (OU ANISO.)PAR RAPPORT AU * * REPERE LOCAL D'ELEMENT , A PARTIR D'UNE DEFINITION GLOBALE * * * MODULES UTILISES: * ----------------- * -INC SMCOORD -INC PPARAM -INC CCOPTIO -INC CCREEL -INC SMELEME -INC SMINTE * * 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 ANG2 (E) ANGLEs UTILISEs DANS LA DEFINITION DES DIRECTIONS * D ORTHOTROPIE (INCLINE) * MELEME (E) POINTEUR DE "MAILLAGE" A 1 SEUL TYPE D'ELEMENT. * MINTE (E) SEGMENT CONTENANT LES FONCTIONS DE FORME,ET LEURS * DERIVEES * 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 * TXR = TABLEAU CONTENANT LES COS.DIRECTEURS DES AXES LOCAUX PAR * RAPPORT 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),VGLOB3(3),VAUX1(3),VAUX2(3) DIMENSION VPT1(3),VPT2(3) * SEGMENT YVAL ENDSEGMENT * SEGMENT WORK REAL*8 XE(3,NBNN),TXR(IDIM,IDIM) ENDSEGMENT * SEGACT MELEME NBELEM=NUM(/2) NBNN=NUM(/1) SEGACT MINTE IF(NUDIR1.EQ.2) SEGACT MINTE2 ************************************************************************ * CALCUL DE VGLOB1 ************************************************************************ VGLOB1(3)=0.D0 VGLOB2(3)=0.D0 ********** CAS 2D ************* IF (IDIM.EQ.2)THEN * * COORDONNEES DU POINT P1 * * OPTION 'RADIAL' : VPT1 = CENTRE -> ON STOCKE PUIS GOTO 15 IF(NUDIR1.EQ.2) THEN VAUX1(1)=VPT1(1) VAUX1(2)=VPT1(2) GO TO 15 ENDIF * * OPTION 'DIRECTION' : VPT1 = DIRECTION 1 * NORMALISATION DU VECTEUR FOURNI c + CALCUL DE V2 = ORTHOGONAL A V1 DANS LE PLAN 2D VNORM=SQRT(VPT1(1)*VPT1(1)+VPT1(2)*VPT1(2)) IF (VNORM.EQ.0.) THEN SEGDES,MINTE,MELEME RETURN ENDIF VGLOB1(1)=VPT1(1)/VNORM VGLOB1(2)=VPT1(2)/VNORM VGLOB2(1)=-VGLOB1(2) VGLOB2(2)=VGLOB1(1) * * OPTION PERPENDICULAIRE : * ON EFFECTUE UNE ROTATION DE 90 DEGRE AUTOUR DE L'AXE 3 IF(NUDIR2.EQ.2)THEN VGLOB1(1)=VGLOB2(1) VGLOB1(2)=VGLOB2(2) VGLOB2(1)=-VGLOB1(2) VGLOB2(2)=VGLOB1(1) * * OPTION INCLINE : * ON EFFECTUE UNE ROTATION DE (ANG) DEGRE AUTOUR DE L'AXE 3 * -> \tilde{[V1,V2,V3]}=[eR eZ eT]*[cosa sina 0 ; -sina cosa 0 ; 0 0 1] * + eventuellement une rotation de ANG2 autour de \tilde{V1} * -> [V1,V2,V3]=\tilde{[V1,V2,V3]}*[1 0 0; 0 cosb -sinb; 0 sinb cosb] ELSEIF(NUDIR2.EQ.3)THEN COSA=COS(ANG) SINA=SIN(ANG) VGLOB1(1)=VGLOB1(1)*COSA+VGLOB2(1)*SINA VGLOB1(2)=VGLOB1(2)*COSA+VGLOB2(2)*SINA VGLOB2(1)=-VGLOB1(2) VGLOB2(2)=VGLOB1(1) IF(ABS(ANG2).GT.XZPREC) THEN c VGLOB3=(0 0 1)^T, VGLOB2=(XX1 XX2 0)^T c VGLOB1 ne change pas, on tourne VGLOB2 (et VGLOB3 implicitement) VGLOB2(1)=VGLOB2(1)*COS(ANG2) VGLOB2(2)=VGLOB2(2)*COS(ANG2) VGLOB2(3)=SIN(ANG2) ENDIF ENDIF ********** CAS 3D ************* ELSEIF(IDIM.EQ.3)THEN * * COORDONNEES DU POINT P1 * * OPTION 'DIRECTION' : VPT1 = DIRECTION 1 * NORMALISATION IF(NUDIR1.NE.2) THEN VNORM=SQRT(VPT1(1)*VPT1(1)+VPT1(2)*VPT1(2)+VPT1(3)*VPT1(3)) IF (VNORM.EQ.0.) THEN SEGDES,MINTE,MELEME RETURN ENDIF VGLOB1(1)=VPT1(1)/VNORM VGLOB1(2)=VPT1(2)/VNORM VGLOB1(3)=VPT1(3)/VNORM ENDIF * * COORDONNEES DU POINT P2 * * OPTION 'RADIAL' : DIRECTION 1 = P1P2 * NORMALISATION PUIS GOTO 15 IF(NUDIR1.EQ.2) THEN VGLOB1(1)=VPT2(1)-VPT1(1) VGLOB1(2)=VPT2(2)-VPT1(2) VGLOB1(3)=VPT2(3)-VPT1(3) 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 * * OPTION 'DIRECTION' : * DIRECTION 3 = PRODUIT VECTORIEL DES DEUX VECTEURS + NORMALISATION IF (IRR.EQ.0)THEN * DIRECTIONS D'ORTHOTROPIE MAL FOURNIES SEGDES,MINTE,MELEME IF(NUDIR1.EQ.2) SEGDES MINTE2 RETURN ENDIF * DIRECTION 2 = PRODUIT VECTORIEL DES DEUX VECTEURS + NORMALISATION * * OPTION 'PERPENDICULAIRE' * ON EFFECTUE UNE ROTATION DE 90 DEGRE AUTOUR DE L'AXE 3 IF(NUDIR2.EQ.2)THEN 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 * * OPTION 'INCLINE' * ON EFFECTUE UNE ROTATION DE (ANG) DEGRE AUTOUR DE L'AXE 3 ELSEIF(NUDIR2.EQ.3)THEN 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 * IF(IFOUR.EQ.1)THEN IDIM2=3 ELSE IDIM2=IDIM ENDIF SEGINI YVAL IPVAL=YVAL SEGINI WORK * ************************************************************************ * BOUCLE SUR LES ELEMENTS ************************************************************************ * DO 10 IEL=1,NBELEM * DO 20 NC=1,IDIM2 DO 20 NV=1,NPG2 VLOC1(NC,NV,IEL)=0.D0 20 CONTINUE * * COORDONNEES DES NOEUDS * * * CALCUL DU REPERE LOCAL DE L'ELEMENT * NBSH=SHPTOT(/2) if (nbsh.eq.-1) then return endif IF(IERR.NE.0)THEN SEGSUP,WORK,YVAL SEGDES , MELEME,MINTE IF(NUDIR1.EQ.2) SEGDES MINTE2 RETURN ENDIF * ******************************************************** * BOUCLE SUR LES POINTS DE GAUSS ******************************************************** * DO 80 IGAU=1,NPG2 c---- OPTION 'RADIAL' ----- IF (NUDIR1.EQ.2) THEN DO 25 ICO=1,IDIM VAUX2(ICO)=0.D0 DO 25 ID=1,NBNN VAUX2(ICO)=VAUX2(ICO)+ . MINTE2.SHPTOT(1,ID,IGAU)*XE(ICO,ID) 25 CONTINUE * * --CAS 2D-- IF(IDIM.EQ.2) THEN VGLOB1(1)=VAUX1(1)-VAUX2(1) VGLOB1(2)=VAUX1(2)-VAUX2(2) * NORMALISATION VNORM=SQRT(VGLOB1(1)*VGLOB1(1)+VGLOB1(2)*VGLOB1(2)) VGLOB1(1)=VGLOB1(1)/VNORM VGLOB1(2)=VGLOB1(2)/VNORM VGLOB2(1)=-VGLOB1(2) VGLOB2(2)=VGLOB1(1) * OPTION 'PERPENDICULAIRE' * ON EFFECTUE UNE ROTATION DE 90 DEGRE AUTOUR DE L'AXE 3 IF(NUDIR2.EQ.2)THEN VGLOB1(1)=VGLOB2(1) VGLOB1(2)=VGLOB2(2) * OPTION 'INCLINE' * ON EFFECTUE UNE ROTATION DE (ANG) DEGRE AUTOUR DE L'AXE 3 ELSEIF(NUDIR2.EQ.3)THEN COSA=COS(ANG) SINA=SIN(ANG) VGLOB1(1)=VGLOB1(1)*COSA+VGLOB2(1)*SINA VGLOB1(2)=VGLOB1(2)*COSA+VGLOB2(2)*SINA ENDIF IF(IFOUR.EQ.1) THEN VGLOB1(3)=0.D0 VGLOB2(1)=-VGLOB1(2) VGLOB2(2)=VGLOB1(1) VGLOB2(3)=0.D0 ENDIF ENDIF * ---------- * --CAS 3D-- IF(IDIM.EQ.3) THEN VAUX1(1)=VAUX2(1)-VPT2(1) VAUX1(2)=VAUX2(2)-VPT2(2) VAUX1(3)=VAUX2(3)-VPT2(3) PSC=VAUX1(1)*VGLOB1(1)+VAUX1(2)*VGLOB1(2)+VAUX1(3)*VGLOB1(3) VGLOB2(1)=VAUX1(1)-PSC*VGLOB1(1) VGLOB2(2)=VAUX1(2)-PSC*VGLOB1(2) VGLOB2(3)=VAUX1(3)-PSC*VGLOB1(3) * NORMALISATION VNORM=SQRT(VGLOB2(1)*VGLOB2(1)+VGLOB2(2)*VGLOB2(2)+ . VGLOB2(3)*VGLOB2(3)) VGLOB2(1)=VGLOB2(1)/VNORM VGLOB2(2)=VGLOB2(2)/VNORM VGLOB2(3)=VGLOB2(3)/VNORM * * PRODUIT VECTORIEL DES DEUX VECTEURS ET NORMALISATION IF (IRR.EQ.0)THEN SEGDES,MINTE,MELEME IF(NUDIR1.EQ.2) SEGDES MINTE2 RETURN ENDIF * * OPTION 'PERPENDICULAIRE' * ON EFFECTUE UNE ROTATION DE 90 DEGRE AUTOUR DE L'AXE 3 IF(NUDIR2.EQ.2)THEN 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 * * OPTION 'INCLINE' * ON EFFECTUE UNE ROTATION DE (ANG) DEGRE AUTOUR DE L'AXE 3 ELSEIF(NUDIR2.EQ.3)THEN 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 * ---------- ENDIF c---- FIN DE L'OPTION 'RADIAL' ----- * * CALCUL DES COS.DIRECTEURS DU REPERE LOCAL / REPERE GLOBAL * IF(IDIM.EQ.2)THEN VLOC1(1,IGAU,IEL)=TXR(1,1)*VGLOB1(1)+TXR(2,1)*VGLOB1(2) VLOC1(2,IGAU,IEL)=TXR(1,2)*VGLOB1(1)+TXR(2,2)*VGLOB1(2) IF(IFOUR.EQ.1)THEN c bp: en 2D Fourier, TXR= [ TXR(1,1) TXR(1,2) 0 ] dans (R,Z,T) c [ TXR(2,1) TXR(2,2) 0 ] c [ 0 0 1 ] VLOC1(3,IGAU,IEL)=VGLOB1(3) ENDIF * ELSEIF(IDIM.EQ.3)THEN DO 40 J=1,3 DO 40 I=1,3 VLOC1(J,IGAU,IEL)=VLOC1(J,IGAU,IEL)+VGLOB1(I)*TXR(I,J) 40 CONTINUE ENDIF 80 CONTINUE ******************************************************** * FIN DE BOUCLE SUR LES POINTS DE GAUSS ******************************************************** 10 CONTINUE ************************************************************************ * FIN DE BOUCLE SUR LES ELEMENTS ************************************************************************ * * DESACTIVATION DES SEGMENTS * SEGSUP,WORK SEGDES , MELEME,MINTE,YVAL IF(NUDIR1.EQ.2) SEGDES MINTE2 * RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales