32
33
34
36
37
38
39#include "implicit_f.inc"
40
41 INTEGER ,INTENT(IN) :: I1,I2,NPT
43 TYPE(TTABLE) ,INTENT(IN) :: TABLE
44 my_real ,
INTENT(OUT) :: xint,yint
45
46
47
48 INTEGER :: I,J1,J2,K
49 my_real :: s1,s2,t1,t2,x1,x2,y1,y2,ax,ay,bx,by,cx,cy,dm,
alpha,beta
50
51
52
53
54
55
56 xint = zero
57 yint = zero
58
59
60
61
62 j1 = (i1 - 1)*npt
63 j2 = (i2 - 1)*npt
64
65 DO k = 2,npt
66 s1 = table%X(1)%VALUES(k-1)*xfac
67 s2 = table%X(1)%VALUES(k) *xfac
68 x1 = s1
69 x2 = s2
70 t1 = table%Y%VALUES(j1 + k-1)
71 t2 = table%Y%VALUES(j1 + k)
72 y1 = table%Y%VALUES(j2 + k-1)
73 y2 = table%Y%VALUES(j2 + k)
74
75 ax = x2 - x1
76 ay = y2 - y1
77 bx = s1 - s2
78 by = t1 - t2
79 dm = ay*bx - ax*by
80 IF (dm /= zero) THEN
81 cx = s1 - x1
82 cy = t1 - y1
83 alpha = (bx * cy - by * cx) / dm
84 beta = (ax * cy - ay * cx) / dm
86 . beta <= zero .and. beta >-one .and. s1 > zero) THEN
87 xint = x1 +
alpha * ax
88 yint = y1 +
alpha * ay
89 EXIT
90 ENDIF
91 ENDIF
92 END DO
93
94 RETURN