Download bcirco.eso

Back to the list

   1 : C BCIRCO    SOURCE    SH236661  13/11/25    21:15:00     7869           
   2 :       SUBROUTINE BCIRCO(IRN1,IPT0,JEL,XC,XR)
   3 : C---------------------------------------------------------------------C
   4 : C     BCIRCO renvoie les coordonnees du centre et le rayon de la      C
   5 : C     boule circonscrite a l'element JEL du MELEME IPT0.              C
   6 : C                                                                     C
   7 : C     IPT0 : pointeur de type MELEME actif en entree et en sortie     C
   8 : C     JEL  : numero de l'element de IPT0 dont on cherche le centre et C
   9 : C            le rayon de la boule circonscrite                        C
  10 : C     XC   : vecteur de dimension IDIM contenant les coordonnees du   C
  11 : C            centre de la boule circonscrite                          C
  12 : C     XR   : rayon de la boule circonscrite                           C
  13 : C---------------------------------------------------------------------C
  14 :       IMPLICIT INTEGER(I-N)
  15 :       IMPLICIT REAL*8 (A-H,O-Z)
  16 : c
  17 : -INC CCOPTIO
  18 : -INC SMELEME
  19 : -INC SMCOORD
  20 : -INC CCGEOME
  21 :       DIMENSION XC(3),XPTS(4,3),A(3,3),B(3,1),BB(4),XM(4,3)
  22 : C
  23 :       DIMENSION RPTS(4),XPTS1(3),YPTS1(3),ZPTS1(3),W(3)
  24 : 
  25 :       SEGMENT RAYONOE
  26 :          REAL*8 RAYN(NBNER)
  27 :       ENDSEGMENT
  28 :       POINTEUR IRN1.RAYONOE
  29 : 
  30 : 
  31 :       IDIMP1=IDIM+1
  32 :       IPT1=IPT0
  33 : c
  34 :       DO I=1,IDIMP1
  35 :           RPTS(I)=IRN1.RAYN(IPT1.NUM(I,JEL))
  36 :       END DO
  37 : C
  38 :       IF (IDIM.EQ.3) THEN
  39 :          IREF1=(IPT1.NUM(1,JEL)-1)*IDIMP1
  40 :          IREF2=(IPT1.NUM(2,JEL)-1)*IDIMP1
  41 :          IREF3=(IPT1.NUM(3,JEL)-1)*IDIMP1
  42 :          IREF4=(IPT1.NUM(4,JEL)-1)*IDIMP1
  43 :          XPTS(1,1)=XCOOR(IREF1+1)
  44 :          XPTS(1,2)=XCOOR(IREF1+2)
  45 :          XPTS(1,3)=XCOOR(IREF1+3)
  46 :          XPTS(2,1)=XCOOR(IREF2+1)
  47 :          XPTS(2,2)=XCOOR(IREF2+2)
  48 :          XPTS(2,3)=XCOOR(IREF2+3)
  49 :          XPTS(3,1)=XCOOR(IREF3+1)
  50 :          XPTS(3,2)=XCOOR(IREF3+2)
  51 :          XPTS(3,3)=XCOOR(IREF3+3)
  52 :          XPTS(4,1)=XCOOR(IREF4+1)
  53 :          XPTS(4,2)=XCOOR(IREF4+2)
  54 :          XPTS(4,3)=XCOOR(IREF4+3)
  55 : C
  56 :          DO i=1,3
  57 :          W(i)= (RPTS(1)*RPTS(1))-(RPTS(i+1)*RPTS(i+1))        
  58 :      &       +(XPTS(i+1,1)*XPTS(i+1,1))+(XPTS(i+1,2)*XPTS(i+1,2))
  59 :      &       +(XPTS(i+1,3)*XPTS(i+1,3))-(XPTS(1,1)*XPTS(1,1))
  60 :      &       -(XPTS(1,2)*XPTS(1,2))-(XPTS(1,3)*XPTS(1,3))
  61 :          W(i)=0.5*W(i)
  62 :          END DO
  63 : 
  64 :          A(1,1)=XPTS(2,1)-XPTS(1,1)
  65 :          A(1,2)=XPTS(2,2)-XPTS(1,2)
  66 :          A(1,3)=XPTS(2,3)-XPTS(1,3)
  67 :          A(2,1)=XPTS(3,1)-XPTS(1,1)
  68 :          A(2,2)=XPTS(3,2)-XPTS(1,2)
  69 :          A(2,3)=XPTS(3,3)-XPTS(1,3)
  70 :          A(3,1)=XPTS(4,1)-XPTS(1,1)
  71 :          A(3,2)=XPTS(4,2)-XPTS(1,2)
  72 :          A(3,3)=XPTS(4,3)-XPTS(1,3)
  73 :          B(1,1)=W(1)
  74 :          B(2,1)=W(2)
  75 :          B(3,1)=W(3)
  76 : C
  77 : c
  78 : 
  78 :          CALL GAUSSK(A,3,3,B,1,1)
  79 : C
  80 :          IF (IERR.NE.0) then
  81 :             WRITE(6,*) 'il y a une erreur dans bcirco'
  82 :             RETURN
  83 :          endif
  84 : C
  85 :          XC(1)=B(1,1)
  86 :          XC(2)=B(2,1)
  87 :          XC(3)=B(3,1)
  88 : C
  89 :          XR=(XC(1)-XPTS(1,1))*(XC(1)-XPTS(1,1))
  90 :      &      +(XC(2)-XPTS(1,2))*(XC(2)-XPTS(1,2))
  91 :      &      +(XC(3)-XPTS(1,3))*(XC(3)-XPTS(1,3))
  92 :      &      - ((RPTS(1))*(RPTS(1)))
  93 : c
  94 :          XR = XR**0.5
  95 : c   
  96 : C
  97 :       ELSEIF (IDIM.EQ.2) THEN
  98 :          IREF1=(IPT1.NUM(1,JEL)-1)*IDIMP1
  99 :          IREF2=(IPT1.NUM(2,JEL)-1)*IDIMP1
 100 :          IREF3=(IPT1.NUM(3,JEL)-1)*IDIMP1
 101 :          XPTS(1,1)=XCOOR(IREF1+1)
 102 :          XPTS(1,2)=XCOOR(IREF1+2)
 103 :          XPTS(2,1)=XCOOR(IREF2+1)
 104 :          XPTS(2,2)=XCOOR(IREF2+2)
 105 :          XPTS(3,1)=XCOOR(IREF3+1)
 106 :          XPTS(3,2)=XCOOR(IREF3+2)
 107 : C
 108 :          DO i=1,2
 109 :          W(i)= ((RPTS(1))**2)-((RPTS(i+1))**2)        
 110 :      &       +((XPTS(i+1,1))**2)+((XPTS(i+1,2))**2)
 111 :      &       -((XPTS(1,1))**2)-((XPTS(1,2))**2)
 112 :          W(i)=0.5*W(i)
 113 :          END DO
 114 : c
 115 :          A(1,1)=XPTS(2,1)-XPTS(1,1)
 116 :          A(1,2)=XPTS(2,2)-XPTS(1,2)
 117 :          A(2,1)=XPTS(3,1)-XPTS(1,1)
 118 :          A(2,2)=XPTS(3,2)-XPTS(1,2)
 119 : c
 120 :          B(1,1)=W(1)
 121 :          B(2,1)=W(2)
 122 : C
 122 :          CALL GAUSSK(A,2,3,B,1,1)
 123 : C
 124 :          IF (IERR.NE.0) then
 125 :             print*,'il y a une erreur dans bcirco : GAUSSK'
 126 :             RETURN
 127 :          endif
 128 : C
 129 :          XC(1)=B(1,1)
 130 :          XC(2)=B(2,1)
 131 : C
 132 :          XR=(XC(1)-XPTS(1,1))**2+(XC(2)-XPTS(1,2))**2
 133 :      &     - ((RPTS(1))**2)
 134 : c
 135 :          XR = XR**0.5
 136 : 
 137 : c  
 138 : c
 139 :       ELSEIF (IDIM.EQ.1) THEN
 140 :          XPTS(1,1)=XCOOR((IPT1.NUM(1,JEL)-1)*IDIMP1+1)
 141 :          XPTS(2,1)=XCOOR((IPT1.NUM(2,JEL)-1)*IDIMP1+1)
 142 :          XC(1)=0.5*((RPTS(1)**2)-(RPTS(2)**2)+(XPTS(2,1)**2)-
 143 :      &             (XPTS(1,1)**2))/(XPTS(2,1)-XPTS(1,1))
 144 :          XR = XC(1)-XPTS(1,1)
 145 :       ENDIF
 146 : C
 147 :       RETURN
 148 :       END
 149 :  
 150 :  

© Cast3M 2003 - All rights reserved.
Disclaimer