1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152
|
SUBROUTINE HDSTAT(MT,NIT,IXR,X21,Y21,Z21,IIA,IV,A,B,C,
1 IK,XA,YA,ZA,CCC,XXX,LZ)
C
C
C THIS SUBROUTINE TAKES THE PTS OF INTERSECTION DETERMINED BY
C SUBROUTINE SOLVE AND PICKS THE COORDINATES WITH THE MAX AND
C MIN X COORDINATES PROVIDED THEY LIE ON THE INTERIOR/BOUNDARY
C OF BOTH ELEMENTS.
C
C
INTEGER XCC
DIMENSION XXX(1),CCC(1),X21(1),Y21(1),Z21(1),
1 IIA(1),IV(1),XA(1),YA(1),ZA(1)
COMMON/HDPTRS/XDUM,XCC
COMMON/ZZZZZZ/RZ(1)
COMMON/GO3/L0,L1,L00,L01,L2,L3,L4,L5,L6,L7,L8,L9,L10,L11,L12,L13
C
EXX=.015
NX=0
IF(MT.EQ.0)GO TO 160
DO 50 JX=1,MT
EI=0
10 EI=EI+.1
IF(EI .GE. 1.) GO TO 160
D=EI*XA(JX)-YA(JX)
DO 40 JO=1,2
M=IV(JO)
JC=L13+(M-1)*LZ
JXC=L12+(M-1)*5
NK=XXX(5+JXC)
I=0
IB=NK*5
C
C
C DETERMINE IF THE PROJECTION OF THE POINT OF INTERSECTION
C BELONGS TO THE INTERIOR OF BOTH PLANES.
C
C
DO 30 J=1,IB,5
EXX=.015
NSUB=J+1+JC
IF(ABS(CCC(NSUB)).GE.100.)EXX=ALOG10(ABS(CCC(NSUB)))
VE=XA(JX)
IF(CCC(J+JC).EQ.0.)VE=YA(JX)
S=VE-CCC(J+3+JC)
S1=VE-CCC(J+4+JC)
T=CCC(J+JC)*YA(JX)+CCC(J+1+JC)*XA(JX)+CCC(J+2+JC)
IF((ABS(T).LT.EXX).AND.(S*S1.LE.0.))GO TO 40
T=-CCC(J+2+JC)+CCC(J+JC)*D
R=EI*CCC(J+JC)+CCC(J+1+JC)
IF(R.EQ.0.)GO TO 30
T=T/R
IF(T.LT.XA(JX))GO TO 30
IF(CCC(J+JC).NE.0.)GO TO 20
T=EI*T-D
20 CONTINUE
IF((T.EQ.CCC(J+3+JC)).OR.(T.EQ.CCC(J+4+JC)))GO TO 10
S=T-CCC(J+3+JC)
S1=T-CCC(J+4+JC)
IF(S*S1.GT.0.)GO TO 30
I=I+1
30 CONTINUE
IF(MOD(I,2).EQ.0)GO TO 50
40 CONTINUE
NX=NX+1
XA(NX)=XA(JX)
YA(NX)=YA(JX)
ZA(NX)=ZA(JX)
50 CONTINUE
IF(NX.EQ.0)GO TO 160
C
C
C
C THIS CODE FINDS THE MAX/MIN X-COORDINATES(Y-COORDINATES) AND
C STORES THEM. FUTHERMORE BOTH THE EQUATION OF LINE AND POINTS(2)
C ARE TREATED LIKE ADDITIONAL EDGES. IN THIS WAY, THE ALGORITHM NEED
C NOT BE DISTURBED. ESSENTIALLY,THEN,THIS TRICK IS TRANSPARENT TO
C THE REST OF THE PROGRAM.
C
C
AMAXX=-(10**6)
AMINX=-AMAXX
AMAXY=AMAXX
AMINY=AMINX
IS=5+(IK-1)*5+L12
IS=XXX(IS)
DO 110 JI=1,NX
IF(A.EQ.0.)GO TO 80
IF(XA(JI).GE.AMINX)GO TO 60
AMINX=XA(JI)
YI=YA(JI)
ZI=ZA(JI)
60 IF(XA(JI).LE.AMAXX)GO TO 70
AMAXX=XA(JI)
YII=YA(JI)
ZII=ZA(JI)
70 CONTINUE
GO TO 110
80 CONTINUE
IF(YA(JI).GE.AMINY)GO TO 90
AMINY=YA(JI)
XI=XA(JI)
ZI=ZA(JI)
90 CONTINUE
IF(YA(JI).LE.AMAXY)GO TO 100
XII=XA(JI)
AMAXY=YA(JI)
ZII=ZA(JI)
100 CONTINUE
110 CONTINUE
NIT=NIT+1
K=5*(NIT-1+IS)+1
RZ(XCC+K-1)=A
RZ(XCC+K )=B
RZ(XCC+K+1)=C
IF (A.EQ.0.) GO TO 120
RZ(XCC+K+2)=AMINX
RZ(XCC+K+3)=AMAXX
AMIN=AMINX
AMAX=AMAXX
YE=YII
ZE=ZII
GO TO 130
120 CONTINUE
RZ(XCC+K+2)=AMINY
RZ(XCC+K+3)=AMAXY
AMIN=XI
AMAX=XII
YI=AMINY
YE=AMAXY
ZE=ZII
130 CONTINUE
IG=IXR+NIT*3
X21(IG-2)=AMIN
Y21(IG-2)=YI
Z21(IG-2)=ZI
DO 140 JK=1,2
IE=IG-JK+1
X21(IE)=AMAX
Y21(IE)=YE
Z21(IE)=ZE
140 CONTINUE
DO 150 JK=1,2
IIA(IG-JK)=0
150 CONTINUE
IIA(IG)=1
TX=(AMAX-AMIN)**2
TY=(YE-YI)**2
DX=(TX+TY)**.5
IF(DX.LT..001)NIT=NIT-1
160 RETURN
END
|