16 function infind(list,val,sort,dist)
45 real*8,
dimension(:),
intent(in) :: list
46 real*8,
intent(in) :: val
47 integer,
intent(in),
optional :: sort
51 real*8,
intent(out),
optional :: dist
54 real*8,
dimension(size(list)) :: lists
55 integer*4 :: nlist, result, tmp(1), sort_list
56 integer*4,
dimension(size(list)) :: mask, idx
58 if (
present(sort))
then
65 if (sort_list == 1)
then
72 if (val >= lists(nlist))
then
74 else if (val <= lists(1))
then
78 where (lists < val) mask = 1
80 if (abs(lists(tmp(1)-1)-val) < abs(lists(tmp(1))-val))
then
86 if (
present(dist)) dist = lists(result)-val
87 if (sort_list == 1)
then
121 real*8,
dimension(:),
intent(in) :: yarr, xarr, xxarr
122 real*8,
intent(in) :: tol
125 real*8,
dimension(size(xxarr)),
intent(out) :: yyarr
128 real*8,
dimension(size(xarr)) :: ysort, xsort
129 integer*4,
dimension(size(xarr)) :: ist
130 integer*4 :: nx, nxx, i, iloc
142 iloc =
infind(xsort,xxarr(i),dist=d)
144 print *,
'interpolation error'
152 if (abs(xxarr(i)-xsort(iloc+1)) < 2*tol)
then
154 m = (ysort(iloc+1)-ysort(iloc))/(xsort(iloc+1)-xsort(iloc))
155 yyarr(i) = ysort(iloc) + m*(xxarr(i)-xsort(iloc))
158 yyarr(i) = ysort(iloc)
subroutine lin_interpolate(yarr, xarr, yyarr, xxarr, tol)
integer *4 function infind(list, val, sort, dist)