164#include "implicit_f.inc"
168#include "units_c.inc"
181 INTEGER :: NDIM, K, NXK(4), I, IPOS(4), IB(2,2,2,2), IP,IN,IM,IL,P,N,M,L,N1,N12,N123
185 IF(
SIZE(xx) < ndim )
THEN
186 WRITE(iout,*)
' ** INTERNAL ERROR - TABLE INTERPOLATION'
187 WRITE(istdo,*)
' ** INTERNAL ERROR - TABLE INTERPOLATION'
193 nxk(k)=
SIZE(table%X(k)%VALUES)
195 dx2 = table%X(k)%VALUES(i) - xx(k)
196 IF(dx2>=zero.OR.i==nxk(k))
THEN
198 r(k) =(table%X(k)%VALUES(i)-xx(k))/
199 . (table%X(k)%VALUES(i)-table%X(k)%VALUES(i-1))
215 ip=n123*(ipos(4)-1+p)
222 ib(l+1,m+1,n+1,p+1)=ip+in+im+il
232 yy= r(4)*( r(3)*( r(2)*( r(1)*ty%VALUES(ib(1,1,1,1))
233 . +unr(1)*ty%VALUES(ib(2,1,1,1)))
234 . +unr(2)*( r(1)*ty%VALUES(ib(1,2,1,1))
235 . +unr(1)*ty%VALUES(ib(2,2,1,1))))
236 . +unr(3)*( r(2)*( r(1)*ty%VALUES(ib(1,1,2,1))
237 . +unr(1)*ty%VALUES(ib(2,1,2,1)))
238 . +unr(2)*( r(1)*ty%VALUES(ib(1,2,2,1))
239 . +unr(1)*ty%VALUES(ib(2,2,2,1)))))
240 . +unr(4)*( r(3)*( r(2)*( r(1)*ty%VALUES(ib(1,1,1,2))
241 . +unr(1)*ty%VALUES(ib(2,1,1,2)))
242 . +unr(2)*( r(1)*ty%VALUES(ib(1,2,1,2))
243 . +unr(1)*ty%VALUES(ib(2,2,1,2))))
244 . +unr(3)*( r(2)*( r(1)*ty%VALUES(ib(1,1,2,2))
245 . +unr(1)*ty%VALUES(ib(2,1,2,2)))
246 . +unr(2)*( r(1)*ty%VALUES(ib(1,2,2,2))
247 . +unr(1)*ty%VALUES(ib(2,2,2,2)))))
259 ib(l+1,m+1,n+1,1)=in+im+il
268 yy=r(3) *( r(2)*( r(1)*ty%VALUES(ib(1,1,1,1))
269 . +unr(1)*ty%VALUES(ib(2,1,1,1)))
270 . +unr(2)*( r(1)*ty%VALUES(ib(1,2,1,1))
271 . +unr(1)*ty%VALUES(ib(2,2,1,1))))
272 . +unr(3)*( r(2)*( r(1)*ty%VALUES(ib(1,1,2,1))
273 . +unr(1)*ty%VALUES(ib(2,1,2,1)))
274 . +unr(2)*( r(1)*ty%VALUES(ib(1,2,2,1))
275 . +unr(1)*ty%VALUES(ib(2,2,2,1))))
284 ib(l+1,m+1,1,1)=im+il
292 yy=( r(2)*( r(1)*ty%VALUES(ib(1,1,1,1))
293 . +unr(1)*ty%VALUES(ib(2,1,1,1)))
294 . +unr(2)*( r(1)*ty%VALUES(ib(1,2,1,1))
295 . +unr(1)*ty%VALUES(ib(2,2,1,1))))
304 yy=r(1)*ty%VALUES(ipos(1))
305 . +unr(1)*ty%VALUES(ipos(1)+1)
327#include "implicit_f.inc"
331#include "com01_c.inc"
332#include "units_c.inc"
337 INTEGER ,
INTENT(IN) :: NEL
338 INTEGER ,
VALUE ,
INTENT(IN) :: DIMX
339 INTEGER ,
DIMENSION(DIMX,TABLE%NDIM) :: IPOS
340 my_real ,
DIMENSION(DIMX,TABLE%NDIM) :: xx
341 my_real ,
DIMENSION(NEL) :: yy, dydx1
345 LOGICAL,
DIMENSION(NEL) :: NEED_TO_COMPUTE
346 INTEGER NDIM, K, NXK(4), I, IB(NEL,2,2,2,2),
347 . IP,IN,IM,IL,P,N,M,L,N1,N12,N123
348 my_real :: dx2,r(nel,4),unr(nel,4),dx2_0(nel)
350 INTEGER :: NINDX_1,M_INDX1,NINDX_2,M_INDX2
351 INTEGER,
DIMENSION(NEL) :: INDX_1,INDX_2
355 IF (
SIZE(xx,2) < table%NDIM)
THEN
356 WRITE(iout,*)
' ** INTERNAL ERROR - TABLE INTERPOLATION'
357 WRITE(istdo,*)
' ** INTERNAL ERROR - TABLE INTERPOLATION'
362 nxk(k)=
SIZE(table%X(k)%VALUES)
366 ipos(1:nel,k)=
max(ipos(1:nel,k),1)
371#include "vectorize.inc"
374 dx2_0(i) = table%X(k)%VALUES(m) - xx(i,k)
375 IF(dx2_0(i) >= zero)
THEN
376 nindx_1 = nindx_1 + 1
378 m_indx1 =
max(m_indx1,m)
380 nindx_2 = nindx_2 + 1
382 m_indx2 =
min(m_indx2,m)
386 need_to_compute(1:nindx_1) = .true.
388#include "vectorize.inc"
390 IF(need_to_compute(j))
THEN
393 dx2 = table%X(k)%VALUES(n) - xx(i,k)
394 IF(dx2<zero.OR.n <=1)
THEN
396 need_to_compute(j) = .false.
401 need_to_compute(1:nindx_2) = .true.
403#include "vectorize.inc"
405 IF(need_to_compute(j))
THEN
408 dx2 = table%X(k)%VALUES(n) - xx(i,k)
409 IF(dx2>=zero.OR.n==nxk(k))
THEN
411 need_to_compute(j) = .false.
419#include "vectorize.inc"
422 r(i,k) =(table%X(k)%VALUES(n+1)-xx(i,k))/
423 . (table%X(k)%VALUES(n+1)-table%X(k)%VALUES(n))
436 ip=n123*(ipos(i,4)-1+p)
438 in=n12*(ipos(i,3)-1+n)
440 im=n1*(ipos(i,2)-1+m)
443 ib(i,l+1,m+1,n+1,p+1)=ip+in+im+il
450 unr(1:nel,1:4)=one-r(1:nel,1:4)
451#include "vectorize.inc"
455 . r(i,4)*(r(i,3)*(r(i,2)*(r(i,1)*table%Y%VALUES(ib(i,1,1,1,1))
456 . +unr(i,1)*table%Y%VALUES(ib(i,2,1,1,1)))
457 . +unr(i,2)*(r(i,1)*table%Y%VALUES(ib(i,1,2,1,1))
458 . +unr(i,1)*table%Y%VALUES(ib(i,2,2,1,1))))
459 . +unr(i,3)*(r(i,2)*(r(i,1)*table%Y%VALUES(ib(i,1,1,2,1))
460 . +unr(i,1)*table%Y%VALUES(ib(i,2,1,2,1)))
461 . +unr(i,2)*(r(i,1)*table%Y%VALUES(ib(i,1,2,2,1))
462 . +unr(i,1)*table%Y%VALUES(ib(i,2,2,2,1)))))
463 . +unr(i,4)*(r(i,3)*(r(i,2)*(r(i,1)*table%Y%VALUES(ib(i,1,1,1,1))
464 . +unr(i,1)*table%Y%VALUES(ib(i,2,1,1,1)))
465 . +unr(i,2)*(r(i,1)*table%Y%VALUES(ib(i,1,2,1,1))
466 . +unr(i,1)*table%Y%VALUES(ib(i,2,2,1,1))))
467 . +unr(i,3)*(r(i,2)*(r(i,1)*table%Y%VALUES(ib(i,1,1,2,1))
468 . +unr(i,1)*table%Y%VALUES(ib(i,2,1,2,1)))
469 . +unr(i,2)*(r(i,1)*table%Y%VALUES(ib(i,1,2,2,1))
470 . +unr(i,1)*table%Y%VALUES(ib(i,2,2,2,1)))))
473 . (r(i,4)*(r(i,3)*(r(i,2)*( table%Y%VALUES(ib(i,2,1,1,1))
474 . -table%Y%VALUES(ib(i,1,1,1,1)))
475 . +unr(i,2)*( table%Y%VALUES(ib(i,2,2,1,1))
476 . -table%Y%VALUES(ib(i,1,2,1,1))))
477 . +unr(i,3)*(r(i,2)*( table%Y%VALUES(ib(i,2,1,2,1))
478 . -table%Y%VALUES(ib(i,1,1,2,1)))
479 . +unr(i,2)*( table%Y%VALUES(ib(i,2,2,2,1))
480 . -table%Y%VALUES(ib(i,1,2,2,1)))))
481 . +unr(i,4)*(r(i,3)*(r(i,2)*( table%Y%VALUES(ib(i,2,1,1,1))
482 . -table%Y%VALUES(ib(i,1,1,1,1)))
483 . +unr(i,2)*( table%Y%VALUES(ib(i,2,2,1,1))
484 . -table%Y%VALUES(ib(i,1,2,1,1))))
485 . +unr(i,3)*(r(i,2)*( table%Y%VALUES(ib(i,2,1,2,1))
486 . -table%Y%VALUES(ib(i,1,1,2,1)))
487 . +unr(i,2)*( table%Y%VALUES(ib(i,2,2,2,1))
488 . -table%Y%VALUES(ib(i,1,2,2,1))))))/
489 . (table%X(1)%VALUES(ipos(i,1)+1)-table%X(1)%VALUES(ipos(i,1)))
499 in=n12*(ipos(i,3)-1+n)
501 im=n1*(ipos(i,2)-1+m)
504 ib(i,l+1,m+1,n+1,1)=in+im+il
510 unr(1:nel,1:3)=one-r(1:nel,1:3)
511#include "vectorize.inc"
515 . (r(i,3)*(r(i,2)*(r(i,1)*table%Y%VALUES(ib(i,1,1,1,1))
516 . +unr(i,1)*table%Y%VALUES(ib(i,2,1,1,1)))
517 . +unr(i,2)*(r(i,1)*table%Y%VALUES(ib(i,1,2,1,1))
518 . +unr(i,1)*table%Y%VALUES(ib(i,2,2,1,1))))
519 . +unr(i,3)*(r(i,2)*(r(i,1)*table%Y%VALUES(ib(i,1,1,2,1))
520 . +unr(i,1)*table%Y%VALUES(ib(i,2,1,2,1)))
521 . +unr(i,2)*(r(i,1)*table%Y%VALUES(ib(i,1,2,2,1))
522 . +unr(i,1)*table%Y%VALUES(ib(i,2,2,2,1)))))
525 . (r(i,3)*(r(i,2)*( table%Y%VALUES(ib(i,2,1,1,1))
526 . -table%Y%VALUES(ib(i,1,1,1,1)))
527 . +unr(i,2)*( table%Y%VALUES(ib(i,2,2,1,1))
528 . -table%Y%VALUES(ib(i,1,2,1,1))))
529 . +unr(i,3)*(r(i,2)*( table%Y%VALUES(ib(i,2,1,2,1))
530 . -table%Y%VALUES(ib(i,1,1,2,1)))
531 . +unr(i,2)*( table%Y%VALUES(ib(i,2,2,2,1))
532 . -table%Y%VALUES(ib(i,1,2,2,1)))))/
533 . (table%X(1)%VALUES(ipos(i,1)+1)-table%X(1)%VALUES(ipos(i,1)))
542 im=n1*(ipos(i,2)-1+m)
545 ib(i,l+1,m+1,1,1)=im+il
550 unr(1:nel,1:2)=one-r(1:nel,1:2)
551#include "vectorize.inc"
555 . (r(i,2)*(r(i,1)*table%Y%VALUES(ib(i,1,1,1,1))
556 . +unr(i,1)*table%Y%VALUES(ib(i,2,1,1,1)))
557 . +unr(i,2)*(r(i,1)*table%Y%VALUES(ib(i,1,2,1,1))
558 . +unr(i,1)*table%Y%VALUES(ib(i,2,2,1,1))))
560 . (r(i,2)*( table%Y%VALUES(ib(i,2,1,1,1))
561 . -table%Y%VALUES(ib(i,1,1,1,1)))
562 . +unr(i,2)*( table%Y%VALUES(ib(i,2,2,1,1))
563 . -table%Y%VALUES(ib(i,1,2,1,1))))/
564 . (table%X(1)%VALUES(ipos(i,1)+1)-table%X(1)%VALUES(ipos(i,1)))
569 unr(1:nel,1:1)=one-r(1:nel,1:1)
570#include
"vectorize.inc"
573 yy(i)= r(i,1)*table%Y%VALUES(ipos(i,1))
574 . +unr(i,1)*table%Y%VALUES(ipos(i,1)+1)
575 dydx1(i)=(table%Y%VALUES(ipos(i,1)+1)-table%Y%VALUES(ipos(i,1)))/
576 . (table%X(1)%VALUES(ipos(i,1)+1)-table%X(1)%VALUES(ipos(i,1)))