arc
C ARC SOURCE CB215821 23/01/25 21:15:05 11573 C 1234567890124567890124567898012456789012345678901234567890123456 C SOURCE L. DI VALENTIN 20/06/97 & DEN1OX,DEN2OX,POINT2) C Cette routine, appele par prtran.eso, est chargee de construire C un arc de cercle en accord avec les elements utilises, de centre C CENTRE, de normale NORMAL, d'extremites POINT et POINT2 et C d'angle ANGLE. C Il y a une redondance entre ces 3 derniers parametres. En fait, C l'ANGLE est prioritaire devant POINT2 a moins que POINT2 = POINT C (cf plus loin). La procedure suppose que POINT2 est la 2eme C extremite de l'arc de cercle. Il est donc important que POINT2 C reference ce point geometrique. C INBR est le nombre de decoupage de l'arc de cercle. C Si INBR = 0, les densites DEN1OX et DEN2OX sont prises en C compte pour la decoupe. C C Si POINT2 = POINT alors quelque soit l'angle, la subroutine C construira un cercle. Dans ce cas, ANGLE sera change egal a C 2*pi (=(2.D0*XPI)) C C Le maillage resultant est sauve dans la pile a la fin. IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) -INC CCREEL -INC PPARAM -INC CCOPTIO -INC CCGEOME -INC SMELEME -INC SMCOORD SEGMENT TABPAR(NBELEM) INTEGER POINT,CENTRE,NORMAL,INBR,POINT2 DEN1 = DEN1OX DEN2 = DEN2OX C Vecteur Normal : IF (IDIM.EQ.3) THEN Xn = XCOOR((NORMAL-1)*(IDIM+1) + 1) Yn = XCOOR((NORMAL-1)*(IDIM+1) + 2) Zn = XCOOR((NORMAL-1)*(IDIM+1) + 3) ELSE Xn = 0.D0 Yn = 0.D0 Zn = 1.D0 ENDIF C On recupere les coordonnees du CENTRE XCEN = XCOOR((CENTRE-1)*(IDIM+1) + 1) YCEN = XCOOR((CENTRE-1)*(IDIM+1) + 2) IF (IDIM.EQ.3) THEN ZCEN = XCOOR((CENTRE-1)*(IDIM+1) + 3) ENDIF C On recupere les coordonnees du vecteur (CENTRE -> POINT) X1 = XCOOR((POINT-1)*(IDIM+1) + 1) - XCEN Y1 = XCOOR((POINT-1)*(IDIM+1) + 2) - YCEN IF (IDIM.EQ.3) THEN Z1 = XCOOR((POINT-1)*(IDIM+1) + 3) - ZCEN ELSE Z1 = 0.D0 ENDIF RAYON = SQRT(X1*X1+Y1*Y1+Z1*Z1) C On calcule le vecteur definissant avec le vecteur precedent C le 2eme vecteur de la base du cercle X2 = Z1*Yn - Y1*Zn Y2 = X1*Zn - Z1*Xn Z2 = Y1*Xn - X1*Yn C Cas du cercle : IF (POINT.EQ.POINT2) THEN ANGLE = (2.D0*XPI) ENDIF DLONG = ABS(ANGLE * RAYON) IF(DLONG.LT.XPETIT) DLONG = 1.D0 C DEN1 = 1.D0/INBR DEN1 = DEN1/DLONG DEN2 = DEN2/DLONG DLONG = ANGLE * RAYON C NBELEM = INBR NX = NBELEM - 1 NBSOUS=0 NBREF=0 IF (ILCOUR.EQ.0) GOTO 666 IF (KDEGRE(ILCOUR).EQ.0) GOTO 666 NBNN=NBNNE(KDEGRE(ILCOUR)) IF (NBNN.EQ.0) GOTO 666 SEGINI MELEME SEGINI TABPAR ITYPEL = KDEGRE(ILCOUR) DIN = DEN1 IPOO = nbpts NUM(1,1) = POINT IF (NX.EQ.0) GOTO 110 DO 102 I=1,NX DIN = DIN * APROG IF (ITYPEL.EQ.2) GOTO 103 IPOO=IPOO+1 NUM(2,I)=IPOO NUM(3,I)=IPOO+1 103 IPOO=IPOO+1 TABPAR(I) = DIN NUM(1,I+1)=IPOO IF (ITYPEL.EQ.3) GOTO 102 NUM(2,I)=IPOO 102 CONTINUE 110 DIN = DIN * APROG IF (ITYPEL.NE.3) GOTO 115 IPOO=IPOO+1 NUM(2,NBELEM)=IPOO TABPAR(NBELEM) = DIN 115 CONTINUE NUM(ITYPEL,NBELEM)=POINT2 SEGACT MCOORD*mod IADR=NBPTS C Creation des points DPAR=0 IF (NX.EQ.0) GOTO 300 NBPTS=IADR+NX*(ITYPEL-1) SEGADJ MCOORD DO 301 I=1,NX DIN = TABPAR(I) DPAR=DPAR+DIN IF (ITYPEL.EQ.2) GOTO 1103 DPAR1=DPAR-DIN*0.5D0 PARA=ANGLE*DPAR1 COSA=COS(PARA) SINA=SIN(PARA) XCOOR(IADR*(IDIM+1)+1)=XCEN+COSA*X1+SINA*X2 XCOOR(IADR*(IDIM+1)+2)=YCEN+COSA*Y1+SINA*Y2 IF (IDIM.EQ.3) THEN XCOOR(IADR*(IDIM+1)+3)=ZCEN+COSA*Z1+SINA*Z2 ENDIF XCOOR((IADR+1)*(IDIM+1))=DENI+DECA*DPAR1 IADR=IADR+1 1103 PARA=ANGLE*DPAR COSA=COS(PARA) SINA=SIN(PARA) XCOOR(IADR*(IDIM+1)+1)=XCEN+COSA*X1+SINA*X2 XCOOR(IADR*(IDIM+1)+2)=YCEN+COSA*Y1+SINA*Y2 IF (IDIM.EQ.3) THEN XCOOR(IADR*(IDIM+1)+3)=ZCEN+COSA*Z1+SINA*Z2 ENDIF XCOOR((IADR+1)*(IDIM+1))=DENI+DECA*DPAR IADR=IADR+1 301 CONTINUE NBPTS = IADR SEGADJ MCOORD 300 DIN = TABPAR(NBELEM) DPAR=DPAR+DIN IF (ITYPEL.NE.3) GOTO 303 NBPTS = IADR+1 SEGADJ MCOORD DPAR1 = DPAR-DIN*0.5D0 PARA = ANGLE * DPAR1 COSA = COS(PARA) SINA = SIN(PARA) XCOOR(IADR*(IDIM+1)+1) = XCEN + X1*COSA + X2*SINA XCOOR(IADR*(IDIM+1)+2) = YCEN + Y1*COSA + Y2*SINA IF (IDIM.EQ.3) THEN XCOOR(IADR*(IDIM+1)+3) = ZCEN + Z1*COSA + Z2*SINA ENDIF XCOOR((IADR+1)*(IDIM+1)) = DENI+DECA*DPAR1 IADR=IADR + 1 303 DO 309 I=1,NUM(/2) ICOLOR(I)=IDCOUL 309 CONTINUE SEGSUP TABPAR SEGDES MELEME RETURN * Erreur 16 Type d'element incorrect 666 CONTINUE RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales