Download neart3.eso

Back to the list

   1 : C NEART3    SOURCE    CHAT      05/01/13    01:56:33     5004           
   2 :       SUBROUTINE NEART3(XGAUSS,NBNN,XE1,XE2,QQ)
   3 : CCCCC
   4 : C     CALCUL DE LA MUTUELLE INDUCTANCE
   5 : C     ENTRE DEUX TRIANGLES PROCHES
   6 : C     COPIE DE RALI2 DE CORFOU
   7 : CCCCC
   8 :       IMPLICIT INTEGER(I-N)
   9 :       IMPLICIT REAL*8(A-H,O-Z)
  10 :       REAL*8 XGAUSS(3)
  11 :       REAL*8 XE1(3,NBNN),XE2(3,NBNN)
  12 :       REAL*8 U(5),V(5),W(5),UU(5),VV(5),WW(5),II(3) 
  13 : *
  14 :       U0=XGAUSS(1)
  15 :       V0=XGAUSS(2)
  16 :       W0=XGAUSS(3)
  17 :       DO 10 I=1,NBNN
  18 :         U(I)=XE1(1,I)
  19 :         V(I)=XE1(2,I)
  20 :         W(I)=XE1(3,I)
  21 :         UU(I)=XE2(1,I)
  22 :         VV(I)=XE2(2,I)
  23 :         WW(I)=XE2(3,I)
  24 :    10 CONTINUE
  25 :       DO 11 I=1,2
  26 :         UU(NBNN+I)=UU(I)
  27 :         VV(NBNN+I)=VV(I)
  28 :         WW(NBNN+I)=WW(I)
  29 :    11 CONTINUE
  30 : *
  31 :       AN1=(UU(1)-U0)*(UU(2)-UU(1))+(VV(1)-V0)*(VV(2)-VV(1))
  32 :      .   +(WW(1)-W0)*(WW(2)-WW(1))
  33 :       AN2=(UU(1)-U0)*(UU(3)-UU(1))+(VV(1)-V0)*(VV(3)-VV(1))
  34 :      .   +(WW(1)-W0)*(WW(3)-WW(1))
  35 :       AA=(UU(2)-UU(1))*(UU(3)-UU(1))+(VV(2)-VV(1))*(VV(3)-VV(1))
  36 :      .  +(WW(2)-WW(1))*(WW(3)-WW(1))
  37 :       BB=(UU(2)-UU(1))**2+(VV(2)-VV(1))**2+(WW(2)-WW(1))**2
  38 :       CC=(UU(3)-UU(1))**2+(VV(3)-VV(1))**2+(WW(3)-WW(1))**2
  39 :       ALO=-CC*AN1+AA*AN2
  40 :       ALO=ALO/(BB*CC-AA*AA)
  41 :       AMO=-BB*AN2+AA*AN1
  42 :       AMO=AMO/(BB*CC-AA*AA)
  43 :       U1=UU(1)+ALO*(UU(2)-UU(1))+AMO*(UU(3)-UU(1))
  44 :       V1=VV(1)+ALO*(VV(2)-VV(1))+AMO*(VV(3)-VV(1))
  45 :       W1=WW(1)+ALO*(WW(2)-WW(1))+AMO*(WW(3)-WW(1))
  46 :       H0=SQRT((U0-U1)**2+(V0-V1)**2+(W0-W1)**2)
  47 :       DO 101 J=1,3
  48 :         K1=J
  49 :         K2=J+1
  50 :         K3=J+2
  51 :         XD=UU(K3)-UU(K2)
  52 :         YD=VV(K3)-VV(K2)
  53 :         ZD=WW(K3)-WW(K2)
  54 :         XV=(VV(K2)-VV(K1))*(WW(K3)-WW(K1))
  55 :      &    -(VV(K3)-VV(K1))*(WW(K2)-WW(K1))
  56 :         YV=(WW(K2)-WW(K1))*(UU(K3)-UU(K1))
  57 :      &    -(WW(K3)-WW(K1))*(UU(K2)-UU(K1))
  58 :         ZV=(UU(K2)-UU(K1))*(VV(K3)-VV(K1))
  59 :      &    -(UU(K3)-UU(K1))*(VV(K2)-VV(K1))
  60 :         R1=YD*ZV-YV*ZD
  61 :         R2=ZD*XV-ZV*XD
  62 :         R3=XD*YV-XV*YD
  63 :         P1=(UU(K1)-UU(K2))*R1+(VV(K1)-VV(K2))*R2+(WW(K1)-WW(K2))*R3
  64 :         P2=(U1-UU(K2))*R1+(V1-VV(K2))*R2+(W1-WW(K2))*R3
  65 :         II(J)=0
  66 :         IF(P1*P2.GT.0.) II(J)=1
  67 :         IF(P1*P2.LT.0.) II(J)=2
  68 :   101 CONTINUE
  69 :       QQ=0.
  70 :       DO 20 J=1,3
  71 :         K1=J
  72 :         K2=J+1
  73 :         K3=J+2
  74 :         IF(II(J).EQ.0) GOTO 20
  75 :         ALA=(UU(K2)-U1)*(UU(K3)-UU(K2))+(VV(K2)-V1)*(VV(K3)-VV(K2))
  76 :      .     +(WW(K2)-W1)*(WW(K3)-WW(K2))
  77 :         ALA=ALA/((UU(K3)-UU(K2))**2+(VV(K3)-VV(K2))**2
  78 :      &          +(WW(K3)-WW(K2))**2)
  79 :         XH=UU(K2)-ALA*(UU(K3)-UU(K2))
  80 :         YH=VV(K2)-ALA*(VV(K3)-VV(K2))
  81 :         ZH=WW(K2)-ALA*(WW(K3)-WW(K2))
  82 :         T1=(VV(K2)-V1)*(WW(K3)-W1)-(VV(K3)-V1)*(WW(K2)-W1)
  83 :         T2=(WW(K2)-W1)*(UU(K3)-U1)-(WW(K3)-W1)*(UU(K2)-U1)
  84 :         T3=(UU(K2)-U1)*(VV(K3)-V1)-(UU(K3)-U1)*(VV(K2)-V1)
  85 :         IF(II(J).EQ.1) GOTO 21
  86 :         T1=-T1
  87 :         T2=-T2
  88 :         T3=-T3
  89 :   21    CONTINUE
  90 :         R1=(YH-V1)*(WW(K2)-W1)-(ZH-W1)*(VV(K2)-V1)
  91 :         R2=(ZH-W1)*(UU(K2)-U1)-(XH-U1)*(WW(K2)-W1)
  92 :         R3=(XH-U1)*(VV(K2)-V1)-(YH-V1)*(UU(K2)-U1)
  93 :         PSCA=T1*R1+T2*R2+T3*R3
  94 :         THETA1=1.
  95 :         IF(PSCA.LT.0.) THETA1=-1.
  96 :         R1=(YH-V1)*(WW(K3)-W1)-(ZH-W1)*(VV(K3)-V1)
  97 :         R2=(ZH-W1)*(UU(K3)-U1)-(XH-U1)*(WW(K3)-W1)
  98 :         R3=(XH-U1)*(VV(K3)-V1)-(YH-V1)*(UU(K3)-U1)
  99 :         PSCA=T1*R1+T2*R2+T3*R3
 100 :         THETA2=1.
 101 :         IF(PSCA.LT.0.) THETA2=-1.
 102 :         PSCA=(XH-U1)*(UU(K2)-U1)+(YH-V1)*(VV(K2)-V1)
 103 :      &      +(ZH-W1)*(WW(K2)-W1)
 104 :         D0=SQRT((XH-U1)**2+(YH-V1)**2+(ZH-W1)**2)
 105 :         IF(D0.LT.1.E-5) GOTO 20
 106 :         D1=SQRT((UU(K2)-U1)**2+(VV(K2)-V1)**2+(WW(K2)-W1)**2)
 107 :         COSTH1=PSCA/(D0*D1)
 108 :         IF(ABS(COSTH1).GE.1.) THEN
 109 :           THETA1=0.
 110 :         ELSE
 111 :           THETA1=THETA1*ACOS(COSTH1)
 112 :         ENDIF
 113 :         PSCA=(XH-U1)*(UU(K3)-U1)+(YH-V1)*(VV(K3)-V1)
 114 :      &      +(ZH-W1)*(WW(K3)-W1)
 115 :         D2=SQRT((UU(K3)-U1)**2+(VV(K3)-V1)**2+(WW(K3)-W1)**2)
 116 :         COSTH2=PSCA/(D0*D2)
 117 :         IF(ABS(COSTH2).GE.1.) THEN
 118 :           THETA2=0.
 119 :         ELSE
 120 :           THETA2=THETA2*ACOS(COSTH2)
 121 :         ENDIF
 122 :         H1=D0
 123 :         IF(ABS(THETA1-THETA2).LE.1.E-4) GOTO 20
 124 :         FOR1=(SQRT((H0*COS(THETA2))**2+H1*H1)+H1*SIN(THETA2))
 125 :      .      *(SQRT((H0*COS(THETA1))**2+H1*H1)-H1*SIN(THETA1))
 126 :         FOR2=(SQRT((H0*COS(THETA2))**2+H1*H1)-H1*SIN(THETA2))
 127 :      .      *(SQRT((H0*COS(THETA1))**2+H1*H1)+H1*SIN(THETA1))
 128 :         FORA=H1*LOG(FOR1/FOR2)/2.
 129 :         FOR1=H0*SIN(THETA2)/SQRT(H0*H0+H1*H1)
 130 :         FOR2=H0*SIN(THETA1)/SQRT(H0*H0+H1*H1)
 131 :         IF(FOR1.LT.-1.)FOR1=-1.
 132 :         IF(FOR2.LT.-1.)FOR2=-1.
 133 :         IF(FOR1.GT.1.)FOR1=1.
 134 :         IF(FOR2.GT.1.)FOR2=1.
 135 :         FORB=H0*(ASIN(FOR1)-ASIN(FOR2))
 136 :         FORR=FORA+FORB-H0*(THETA2-THETA1)
 137 :         QQ=QQ+FORR
 138 :   20  CONTINUE
 139 :       RETURN
 140 :       END
 141 :  
 142 :  

© Cast3M 2003 - All rights reserved.
Disclaimer