30
31
32
33
34
35
36
37
38 implicit none
39
40
41
42#include "my_real.inc"
43
44
45
46 INTEGER ,INTENT(IN) :: LEN
47 INTEGER ,INTENT(IN) :: NPTF
48 my_real ,
DIMENSION(LEN) ,
INTENT(IN) :: xi
49 my_real ,
DIMENSION(LEN) ,
INTENT(IN) :: yi
50 my_real ,
DIMENSION(NPTF) ,
INTENT(IN) :: xf
51 my_real ,
DIMENSION(NPTF) ,
INTENT(OUT) :: yf
52
53
54
55 INTEGER :: IPT,IDX,IPTM1
57
58 IF (nptf >= len) THEN
59 idx = 1
60 x1 = xi(idx)
61 y1 = yi(idx)
62 x2 = xi(idx+1)
63 y2 = yi(idx+1)
64 deri = (y2 - y1) / (x2 - x1)
65 DO ipt = 1,nptf
66 IF (xf(ipt) >= x2 .and. idx+1 < len) THEN
67 idx = idx + 1
68 x1 = x2
69 y1 = y2
70 x2 = xi(idx+1)
71 y2 = yi(idx+1)
72 deri = (y2 - y1) / (x2 - x1)
73 END IF
74 yf(ipt) = y1 + deri * (xf(ipt) - x1)
75 END DO
76 ELSE
77 idx = 1
78 x1 = xi(1)
79 y1 = yi(1)
80 x2 = xi(2)
81 y2 = yi(2)
82 deri = (y2 - y1) / (x2 - x1)
83 yf(1) = y1
84 iptm1 = 1
85 DO ipt = 2,len
86 IF (idx < nptf) THEN
87 IF (xf(idx+1) >= xi(iptm1) .and. xf(idx+1) <= xi(ipt) ) THEN
88
89 idx = idx + 1
90 x1 = xi(iptm1)
91 y1 = yi(iptm1)
92 x2 = xi(ipt)
93 y2 = yi(ipt)
94 deri = (y2 - y1) / (x2 - x1)
95 yf(idx) = y1 + deri * (xf(idx) - x1)
96 iptm1 = ipt
97 ENDIF
98 END IF
99 END DO
100 END IF
101
102 RETURN