bcirco
C BCIRCO SOURCE BP208322 16/11/18 21:15:14 9177 C---------------------------------------------------------------------C C BCIRCO renvoie les coordonnees du centre et le rayon de la C C boule circonscrite a l'element JEL du MELEME IPT0. C C C C IPT0 : pointeur de type MELEME actif en entree et en sortie C C JEL : numero de l'element de IPT0 dont on cherche le centre et C C le rayon de la boule circonscrite C C XC : vecteur de dimension IDIM contenant les coordonnees du C C centre de la boule circonscrite C C XR : rayon de la boule circonscrite C C---------------------------------------------------------------------C IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) c -INC PPARAM -INC CCOPTIO -INC SMELEME -INC SMCOORD -INC CCGEOME DIMENSION XC(3),XPTS(4,3),A(3,3),B(3,1),BB(4),XM(4,3) C DIMENSION RPTS(4),XPTS1(3),YPTS1(3),ZPTS1(3),W(3) SEGMENT RAYONOE ENDSEGMENT POINTEUR IRN1.RAYONOE IDIMP1=IDIM+1 IPT1=IPT0 c DO I=1,IDIMP1 END DO C IF (IDIM.EQ.3) THEN IREF1=(IPT1.NUM(1,JEL)-1)*IDIMP1 IREF2=(IPT1.NUM(2,JEL)-1)*IDIMP1 IREF3=(IPT1.NUM(3,JEL)-1)*IDIMP1 IREF4=(IPT1.NUM(4,JEL)-1)*IDIMP1 XPTS(1,1)=XCOOR(IREF1+1) XPTS(1,2)=XCOOR(IREF1+2) XPTS(1,3)=XCOOR(IREF1+3) XPTS(2,1)=XCOOR(IREF2+1) XPTS(2,2)=XCOOR(IREF2+2) XPTS(2,3)=XCOOR(IREF2+3) XPTS(3,1)=XCOOR(IREF3+1) XPTS(3,2)=XCOOR(IREF3+2) XPTS(3,3)=XCOOR(IREF3+3) XPTS(4,1)=XCOOR(IREF4+1) XPTS(4,2)=XCOOR(IREF4+2) XPTS(4,3)=XCOOR(IREF4+3) C DO i=1,3 W(i)= (RPTS(1)*RPTS(1))-(RPTS(i+1)*RPTS(i+1)) & +(XPTS(i+1,1)*XPTS(i+1,1))+(XPTS(i+1,2)*XPTS(i+1,2)) & +(XPTS(i+1,3)*XPTS(i+1,3))-(XPTS(1,1)*XPTS(1,1)) & -(XPTS(1,2)*XPTS(1,2))-(XPTS(1,3)*XPTS(1,3)) W(i)=0.5*W(i) END DO A(1,1)=XPTS(2,1)-XPTS(1,1) A(1,2)=XPTS(2,2)-XPTS(1,2) A(1,3)=XPTS(2,3)-XPTS(1,3) A(2,1)=XPTS(3,1)-XPTS(1,1) A(2,2)=XPTS(3,2)-XPTS(1,2) A(2,3)=XPTS(3,3)-XPTS(1,3) A(3,1)=XPTS(4,1)-XPTS(1,1) A(3,2)=XPTS(4,2)-XPTS(1,2) A(3,3)=XPTS(4,3)-XPTS(1,3) B(1,1)=W(1) B(2,1)=W(2) B(3,1)=W(3) C c C IF (IERR.NE.0) then WRITE(6,*) 'il y a une erreur dans bcirco' RETURN endif C XC(1)=B(1,1) XC(2)=B(2,1) XC(3)=B(3,1) C XR=(XC(1)-XPTS(1,1))*(XC(1)-XPTS(1,1)) & +(XC(2)-XPTS(1,2))*(XC(2)-XPTS(1,2)) & +(XC(3)-XPTS(1,3))*(XC(3)-XPTS(1,3)) & - ((RPTS(1))*(RPTS(1))) c XR = XR**0.5 c C ELSEIF (IDIM.EQ.2) THEN IREF1=(IPT1.NUM(1,JEL)-1)*IDIMP1 IREF2=(IPT1.NUM(2,JEL)-1)*IDIMP1 IREF3=(IPT1.NUM(3,JEL)-1)*IDIMP1 XPTS(1,1)=XCOOR(IREF1+1) XPTS(1,2)=XCOOR(IREF1+2) XPTS(2,1)=XCOOR(IREF2+1) XPTS(2,2)=XCOOR(IREF2+2) XPTS(3,1)=XCOOR(IREF3+1) XPTS(3,2)=XCOOR(IREF3+2) C DO i=1,2 W(i)= ((RPTS(1))**2)-((RPTS(i+1))**2) & +((XPTS(i+1,1))**2)+((XPTS(i+1,2))**2) & -((XPTS(1,1))**2)-((XPTS(1,2))**2) W(i)=0.5*W(i) END DO c A(1,1)=XPTS(2,1)-XPTS(1,1) A(1,2)=XPTS(2,2)-XPTS(1,2) A(2,1)=XPTS(3,1)-XPTS(1,1) A(2,2)=XPTS(3,2)-XPTS(1,2) c B(1,1)=W(1) B(2,1)=W(2) C C IF (IERR.NE.0) then print*,'il y a une erreur dans bcirco : GAUSSK' RETURN endif C XC(1)=B(1,1) XC(2)=B(2,1) C XR=(XC(1)-XPTS(1,1))**2+(XC(2)-XPTS(1,2))**2 & - ((RPTS(1))**2) c XR = XR**0.5 c c ELSEIF (IDIM.EQ.1) THEN XPTS(1,1)=XCOOR((IPT1.NUM(1,JEL)-1)*IDIMP1+1) XPTS(2,1)=XCOOR((IPT1.NUM(2,JEL)-1)*IDIMP1+1) XC(1)=0.5*((RPTS(1)**2)-(RPTS(2)**2)+(XPTS(2,1)**2)- & (XPTS(1,1)**2))/(XPTS(2,1)-XPTS(1,1)) XR = XC(1)-XPTS(1,1) ENDIF C RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales