98#include "implicit_f.inc"
103 INTEGER,
VALUE ,
INTENT(IN) :: DIMX
104 INTEGER ,
INTENT(IN) :: NEL
105 my_real,
DIMENSION(DIMX,TABLE%NDIM),
INTENT(IN) :: xx
106 INTEGER,
DIMENSION(DIMX,TABLE%NDIM),
INTENT(INOUT) :: IPOS
107 my_real,
DIMENSION(DIMX) ,
INTENT(INOUT) :: yy
108 my_real,
DIMENSION(DIMX) ,
INTENT(INOUT) :: dydx
109 LOGICAL,
OPTIONAL,
INTENT(IN) :: OPT_EXTRAPOLATE
113 LOGICAL :: NEED_TO_COMPUTE
114 INTEGER ,J,K,M,N,I1,I2,J1,J2,K1,K2,L1,L2,NDIM
116 INTEGER,
DIMENSION(NEL) :: INDX_1,INDX_2
117 INTEGER,
DIMENSION(4) :: LDIM
118 my_real :: dx,dy,
alpha,alphai,beta,betai,gamma,gammai,delta,deltai
119 my_real,
DIMENSION(NEL,4) :: fac
120 LOGICAL DO_EXTRAPOLATION
124 do_extrapolation = .true.
125 IF(
PRESENT(opt_extrapolate))
THEN
126 do_extrapolation = opt_extrapolate
130 IF (
SIZE(xx,2) < ndim )
THEN
131 CALL ancmsg(msgid=36,anmode=aninfo,c1=
'TABLE INTERPOLATION')
136 ldim(k) =
SIZE(table%X(k)%VALUES)
140 ipos(1:nel,k) =
max(ipos(1:nel,k),1)
143#include "vectorize.inc"
146 dx = table%X(k)%VALUES(m) - xx(i,k)
148 nindx_1 = nindx_1 + 1
151 nindx_2 = nindx_2 + 1
159 need_to_compute = .true.
160 DO WHILE (need_to_compute )
161 dx = table%X(k)%VALUES(m) - xx(i,k)
162 IF (dx < zero .OR. m <= 1 )
THEN
164 need_to_compute = .false.
174 need_to_compute = .true.
175 DO WHILE (need_to_compute )
176 dx = table%X(k)%VALUES(m) - xx(i,k)
177 IF (dx >= zero .OR. m == ldim(k))
THEN
179 need_to_compute = .false.
188#include "vectorize.inc"
191 fac(i,k) = (table%X(k)%VALUES(n+1) - xx(i,k)) / (table%X(k)%VALUES(n+1) - table%X(k)%VALUES(n))
195 IF(.NOT. do_extrapolation)
THEN
197#include "vectorize.inc"
200 fac(i,k) =
min(one,
max(fac(i,k),zero))
209#include "vectorize.inc"
228 . delta* (gamma*(beta * (
alpha * table%Y4D(i1,j1,k1,l1)
229 . + alphai * table%Y4D(i2,j1,k1,l1))
230 . + betai* (
alpha * table%Y4D(i1,j2,k1,l1)
231 . + alphai * table%Y4D(i2,j2,k1,l1)) )
232 . +gammai*( beta* (
alpha * table%Y4D(i1,j1,k2,l1)
233 . + alphai * table%Y4D(i2,j1,k2,l1))
234 . + betai* (
alpha * table%Y4D(i1,j2,k2,l1)
235 . + alphai * table%Y4D(i2,j2,k2,l1))))
237 . + deltai*(gamma *(beta * (
alpha * table%Y4D(i1,j1,k1,l2)
238 . + alphai * table%Y4D(i2,j1,k1,l2))
239 . + betai* (
alpha * table%Y4D(i1,j2,k1,l2)
240 . + alphai * table%Y4D(i2,j2,k1,l2)))
241 . +gammai* (beta* (
alpha * table%Y4D(i1,j1,k2,l2)
242 . + alphai * table%Y4D(i2,j1,k2,l2))
243 . + betai* (
alpha * table%Y4D(i1,j2,k2,l2)
244 . + alphai * table%Y4D(i2,j2,k2,l2))))
246 dy = delta * (gamma *(beta *(table%Y4D(i2,j1,k1,l1)-table%Y4D(i1,j1,k1,l1))
247 . + betai*(table%Y4D(i2,j2,k1,l1)-table%Y4D(i1,j2,k1,l1)))
248 . + gammai *(beta *(table%Y4D(i2,j1,k2,l1)-table%Y4D(i1,j1,k2,l1))
249 . + betai*(table%Y4D(i2,j2,k2,l1)-table%Y4D(i1,j2,k2,l1))))
250 . + deltai * (gamma *(beta *(table%Y4D(i2,j1,k1,l2)-table%Y4D(i1,j1,k1,l2))
251 . + betai*(table%Y4D(i2,j2,k1,l2)-table%Y4D(i1,j2,k1,l2)))
252 . + gammai *(beta *(table%Y4D(i2,j1,k2,l2)-table%Y4D(i1,j1,k2,l2))
253 . + betai*(table%Y4D(i2,j2,k2,l2)-table%Y4D(i1,j2,k2,l2))))
254 dx = table%X(1)%VALUES(i2) - table%X(1)%VALUES(i1)
259#include "vectorize.inc"
273 yy(i)=(gamma * (beta * (
alpha*table%Y3D(i1,j1,k1) + alphai*table%Y3D(i2,j1,k1))
274 . + betai* (
alpha*table%Y3D(i1,j2,k1) + alphai*table%Y3D(i2,j2,k1)) )
275 . + gammai * (beta * (
alpha*table%Y3D(i1,j1,k2) + alphai*table%Y3D(i2,j1,k2))
276 . + betai* (
alpha*table%Y3D(i1,j2,k2) + alphai*table%Y3D(i2,j2,k2))))
278 dy = gamma * ( beta*(table%Y3D(i2,j1,k1) - table%Y3D(i1,j1,k1))
279 . + betai*(table%Y3D(i2,j2,k1) - table%Y3D(i1,j2,k1)))
280 . + gammai * ( beta*(table%Y3D(i2,j1,k2) - table%Y3D(i1,j1,k2))
281 . + betai*(table%Y3D(i2,j2,k2) - table%Y3D(i1,j2,k2)))
282 dx = table%X(1)%VALUES(i2) - table%X(1)%VALUES(i1)
288#include "vectorize.inc"
298 yy(i) = (beta * (
alpha*table%Y2D(i1,j1) + alphai*table%Y2D(i2,j1))
299 . + betai * (
alpha*table%Y2D(i1,j2) + alphai*table%Y2D(i2,j2)) )
300 dydx(i) = (beta *(table%Y2D(i2,j1) - table%Y2D(i1,j1))
301 . + betai *(table%Y2D(i2,j2) - table%Y2D(i1,j2)))
302 . / (table%X(1)%VALUES(i2)-table%X(1)%VALUES(i1))
306#include "vectorize.inc"
312 yy(i) =
alpha*table%Y1D(i1) + alphai*table%Y1D(i2)
313 dydx(i) = (table%Y1D(i2) - table%Y1D(i1)) / (table%X(1)%VALUES(i2) - table%X(1)%VALUES(i1))
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)