109#include "implicit_f.inc"
114 INTEGER,
VALUE ,
INTENT(IN) :: DIMX
115 INTEGER ,
INTENT(IN) :: NEL
116 my_real,
DIMENSION(DIMX,TABLE%NDIM),
INTENT(IN) :: xx
117 INTEGER,
DIMENSION(DIMX,TABLE%NDIM),
INTENT(INOUT) :: IPOS
118 my_real,
DIMENSION(DIMX) ,
INTENT(INOUT) :: yy
119 my_real,
DIMENSION(DIMX) ,
INTENT(INOUT) :: dydx
120 LOGICAL,
OPTIONAL,
INTENT(IN) :: OPT_EXTRAPOLATE
124 LOGICAL :: NEED_TO_COMPUTE
125 INTEGER I,J,K,M,N,I1,I2,J1,J2,K1,K2,L1,L2,NDIM
126 INTEGER :: NINDX_1,NINDX_2
127 INTEGER,
DIMENSION(NEL) :: INDX_1,INDX_2
128 INTEGER,
DIMENSION(4) :: LDIM
129 my_real :: dx,dy,
alpha,alphai,beta,betai,gamma,gammai,delta,deltai
130 my_real,
DIMENSION(NEL,4) :: fac
131 LOGICAL DO_EXTRAPOLATION
135 do_extrapolation = .true.
136 IF(
PRESENT(opt_extrapolate))
THEN
137 do_extrapolation = opt_extrapolate
141 IF (
SIZE(xx,2) < ndim )
THEN
142 CALL ancmsg(msgid=36,anmode=aninfo,c1=
'TABLE INTERPOLATION')
147 ldim(k) =
SIZE(table%X(k)%VALUES)
151 ipos(1:nel,k) =
max(ipos(1:nel,k),1)
154#include "vectorize.inc"
157 dx = table%X(k)%VALUES(m) - xx(i,k)
159 nindx_1 = nindx_1 + 1
162 nindx_2 = nindx_2 + 1
170 need_to_compute = .true.
171 DO WHILE (need_to_compute )
172 dx = table%X(k)%VALUES(m) - xx(i,k)
173 IF (dx < zero .OR. m <= 1 )
THEN
175 need_to_compute = .false.
185 need_to_compute = .true.
186 DO WHILE (need_to_compute )
187 dx = table%X(k)%VALUES(m) - xx(i,k)
188 IF (dx >= zero .OR. m == ldim(k))
THEN
190 need_to_compute = .false.
199#include "vectorize.inc"
202 fac(i,k) = (table%X(k)%VALUES(n+1) - xx(i,k)) / (table%X(k)%VALUES(n+1) - table%X
206 IF(.NOT. do_extrapolation)
THEN
208#include "vectorize.inc"
211 fac(i,k) =
min(one,
max(fac(i,k),zero))
220#include "vectorize.inc"
239 . delta* (gamma*(beta * (
alpha * table%Y4D(i1,j1,k1,l1)
240 . + alphai * table%Y4D(i2,j1,k1,l1))
241 . + betai* (
alpha * table%Y4D(i1,j2,k1,l1)
243 . +gammai*( beta* (
alpha * table%Y4D(i1,j1,k2,l1)
244 . + alphai * table%Y4D(i2,j1,k2,l1))
245 . + betai* (
alpha * table%Y4D(i1,j2,k2,l1)
246 . + alphai * table%Y4D(i2,j2,k2,l1
248 . + deltai*(gamma *(beta * (
alpha * table%Y4D(i1,j1,k1,l2)
249 . + alphai * table%Y4D(i2,j1,k1,l2))
250 . + betai* (
alpha * table%Y4D(i1,j2,k1,l2)
251 . + alphai * table%Y4D(i2,j2,k1,l2)))
252 . +gammai* (beta* (
alpha * table%Y4D(i1,j1,k2,l2)
253 . + alphai * table%Y4D(i2,j1,k2,l2))
254 . + betai* (
alpha * table%Y4D(i1,j2,k2,l2)
255 . + alphai * table%Y4D(i2,j2,k2,l2))))
257 dy = delta * (gamma *(beta *(table%Y4D(i2,j1,k1,l1)-table%Y4D(i1,j1,k1,l1))
258 . + betai*(table%Y4D(i2,j2,k1,l1)-table%Y4D(i1,j2,k1
259 . + gammai *(beta *(table%Y4D(i2,j1,k2,l1)-table%Y4D(i1,j1,k2,l1))
260 . + betai*(table%Y4D(i2,j2,k2,l1)-table%Y4D(i1,j2,k2,l1))))
261 . + deltai * (gamma *(beta *(table%Y4D(i2,j1,k1,l2)-table%Y4D(i1,j1,k1,l2))
262 . + betai*(table%Y4D(i2,j2,k1,l2)-table%Y4D
263 . + gammai *(beta *(table%Y4D(i2,j1,k2,l2)
264 . + betai*(table%Y4D(i2,j2,k2,l2)-table%Y4D(i1,j2,k2,l2)))
265 dx = table%X(1)%VALUES(i2) - table%X(1)%VALUES(i1)
270#include "vectorize.inc"
284 yy(i)=(gamma * (beta * (
alpha*table%Y3D(i1,j1,k1) + alphai*table%Y3D(i2,j1,k1))
285 . + betai* (
alpha*table%Y3D(i1,j2,k1) + alphai*table%Y3D(i2,j2,k1)) )
286 . + gammai * (beta * (
alpha*table%Y3D(i1,j1,k2) + alphai*table%Y3D(i2
287 . + betai* (
alpha*table%Y3D(i1,j2,k2) + alphai*table%Y3D(i2,j2,k2))))
289 dy = gamma * ( beta*(table%Y3D(i2,j1,k1) - table%Y3D(i1,j1,k1))
290 . + betai*(table%Y3D(i2,j2,k1) - table%Y3D(i1,j2,k1)))
291 . + gammai * ( beta*(table%Y3D(i2,j1,k2) - table%Y3D(i1,j1,k2))
292 . + betai*(table%Y3D(i2,j2,k2) - table%Y3D(i1,j2,k2)))
293 dx = table%X(1)%VALUES(i2) - table%X(1)%VALUES(i1)
299#include "vectorize.inc"
309 yy(i) = (beta * (
alpha*table%Y2D(i1,j1) + alphai*table%Y2D(i2,j1))
310 . + betai * (
alpha*table%Y2D(i1,j2) + alphai*table%Y2D(i2,j2)) )
311 dydx(i) = (beta *(table%Y2D(i2,j1) - table%Y2D(i1,j1))
312 . + betai *(table%Y2D(i2,j2) - table%Y2D(i1,j2)))
313 . / (table%X(1)%VALUES(i2)-table%X(1)%VALUES(i1))
317#include "vectorize.inc"
323 yy(i) =
alpha*table%Y1D(i1) + alphai*table%Y1D(i2)
324 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)