280#include "implicit_f.inc"
291INTEGER NDIM, I,K,IP,IN,IM,IL,P,N,M,L,N1,N12,N123
292 INTEGER NXK(4),IPOS(4)
298 IF(
SIZE(xx) < ndim )
THEN
299 CALL ancmsg(msgid=36,anmode=aninfo,
300 . c1=
'TABLE INTERPOLATION')
308 nxk(k) =
SIZE(table%X(k)%VALUES)
310 dx2 = table%X(k)%VALUES(i) - xx(k)
311 IF (dx2>=zero .OR. i==nxk(k))
THEN
313 r(k) =(table%X(k)%VALUES(i)-xx(k))/
314 . (table%X(k)%VALUES(i)-table%X(k)%VALUES(i-1))
332 ip=n123*(ipos(4)-1+p)
339 ib(l+1,m+1,n+1,p+1)=ip+in+im+il
345 yy = r(4) * (r(3)*(r(2) * (r(1)*ty%VALUES(ib(1,1,1,1)) + unr(1)*ty%VALUES(ib(2,1,1,1)))
346 . + unr(2) * (r(1)*ty%VALUES(ib(1,2,1,1)) + unr(1)*ty%VALUES(ib(2,2,1,1))))
347 . +unr(3)*(r(2) * (r(1)*ty%VALUES(ib(1,1,2,1)) + unr(1)*ty%VALUES(ib(2,1,2,1)))
348 . + unr(2) * (r(1)*ty%VALUES(ib(1,2,2,1)) + unr(1)*ty%VALUES(ib(2,2,2,1)))))
349 . +unr(4) *(r(3)*(r(2) * (r(1)*ty%VALUES(ib(1,1,1,2)) + unr(1)*ty%VALUES(ib(2,1,1,2)))
350 . +unr(2) * (r(1)*ty%VALUES(ib(1,2,1,2)) + unr(1)*ty%VALUES(ib(2,2,1,2))))
351 . +unr(3)*(r(2) * (r(1)*ty%VALUES(ib(1,1,2,2)) + unr(1)*ty%VALUES(ib(2,1,2,2)))
352 . +unr(2) * (r(1)*ty%VALUES(ib(1,2,2,2)) + unr(1)*ty%VALUES(ib(2,2,2,2)))))
359 in = n12*(ipos(3)-1+n)
361 im = n1*(ipos(2)-1+m)
364 ib(l+1,m+1,n+1,1) = in+im+il
369 IF (r(2) == one)
THEN
370 yy = r(3) * (r(1)*ty%VALUES(ib(1,1,1,1)) + unr(1)*ty%VALUES(ib(2,1,1,1)))
371 . + unr(3) * (r(1)*ty%VALUES(ib(1,1,2,1)) + unr(1)*ty%VALUES(ib(2,1,2,1)))
374 yy = r(3) *(r(2) * (r(1)*ty%VALUES(ib(1,1,1,1)) + unr(1)*ty%VALUES(ib(2,1,1,1
375 . +unr(2) * (r(1)*ty%VALUES(ib(1,2,1,1)) + unr(1)*ty%VALUES(ib(2,2,1,1))))
376 . + unr(3) *(r(2) * (r(1)*ty%VALUES(ib(1,1,2,1)) + unr(1)*ty%VALUES(ib
377 . +unr(2) * (r(1)*ty%VALUES(ib(1,2,2,1)) + unr(1)*ty%VALUES(ib(2,2,2,1))))
387 ib(l+1,m+1,1,1)=im+il
391 yy = (r(2)*(r(1)*ty%VALUES(ib(1,1,1,1)) + unr(1)*ty%VALUES(ib(2,1,1,1)))
392 . +unr(2)*(r(1)*ty%VALUES(ib(1,2,1,1)) + unr(1)*ty%VALUES(ib(2,2,1,1))))
398 yy = r(1) * ty%VALUES(ipos(1)) + unr(1) * ty%VALUES(ipos(1)+1)
425#include "implicit_f.inc"
431 my_real,
INTENT(IN),
DIMENSION(XXDIM) :: xx
432 my_real,
INTENT(OUT) :: yy,dydx
437 INTEGER NDIM, I,K,IP,IN,IM,IL,P,N,M,L,N1,N12,N123
438 INTEGER NXK(4),IPOS(4)
444 IF( xxdim < ndim )
THEN
445 CALL ancmsg(msgid=36,anmode=aninfo,
446 . c1=
'TABLE INTERPOLATION')
454 nxk(k) =
SIZE(table%X(k)%VALUES)
456 dx2 = table%X(k)%VALUES(i) - xx(k)
457 IF (dx2>=zero .OR. i==nxk(k))
THEN
459 r(k) =(table%X(k)%VALUES(i)-xx(k))/
460 . (table%X(k)%VALUES(i)-table%X(k)%VALUES(i-1))
478 ip=n123*(ipos(4)-1+p)
485 ib(l+1,m+1,n+1,p+1)=ip+in+im+il
491 yy = r(4) * (r(3)*(r(2) * (r(1)*ty%VALUES(ib(1,1,1,1)) + unr(1)*ty%VALUES(ib
492 . + unr(2) * (r(1)*ty%VALUES(ib(1,2,1,1)) + unr(1)*ty%VALUES(ib(2,2,1,1))))
493 . +unr(3)*(r(2) * (r(1)*ty%VALUES(ib(1,1,2,1)) + unr(1)*ty%VALUES(ib(2,1,2,1)))
494 . + unr(2) * (r(1)*ty%VALUES(ib(1,2,2,1)) + unr(1)*ty%VALUES(ib(2,2,2,1)))))
495 . +unr(4) *(r(3)*(r(2) * (r(1)*ty%VALUES(ib(1,1,1,2)) + unr(1)*ty%VALUES(ib(2,1,1,2)))
496 . +unr(2) * (r(1)*ty%VALUES(ib(1,2,1,2)) + unr(1)*ty%VALUES(ib(2,2,1,2))))
497 . +unr(3)*(r(2) * (r(1)*ty%VALUES(ib(1,1,2,2)) + unr(1
498 . +unr(2) * (r(1)*ty%VALUES(ib(1,2,2,2)) + unr(1)*ty%VALUES(ib(2,2,2,2)))))
501 . (r(4) * (r(3) * (r(2) * ( ty%VALUES(ib(2,1,1,1)) - ty%VALUES(ib(1,1,1,1)))
502 . +unr(2) * ( ty%VALUES(ib(2,2,1,1)) - ty%VALUES(ib(1,2,1,1))))
503 . + unr(3) * (r(2) * ( ty%VALUES(ib(2,1,2,1)) - ty%VALUES(ib(1,1,2,1)))
504 . + unr(2) * ( ty%VALUES(ib(2,2,2,1)) - ty%VALUES(ib(1,2,2,1)))))
505 . + unr(4) * (r(3) * (r(2) * ( ty%VALUES(ib(2,1,1,1)) - ty%VALUES(ib(1,1,1,1)))
506 . + unr(2) * ( ty%VALUES(ib(2,2,1,1)) - ty%VALUES(ib(1,2,1,1))))
507 . + unr(3) * (r(2) * ( ty%VALUES(ib(2,1,2,1)) - ty%VALUES(ib(1,1,2,1)))
508 . + unr(2) * ( ty%VALUES(ib(2,2,2,1)) - ty%VALUES(ib(1,2,2,1))))))/
509 . (table%X(1)%VALUES(ipos(1)+1)-table%X(1)%VALUES(ipos(1)))
518 in = n12*(ipos(3)-1+n)
520 im = n1*(ipos(2)-1+m)
523 ib(l+1,m+1,n+1,1) = in+im+il
528 IF (r(2) == one)
THEN
529 yy = r(3) * (r(1)*ty%VALUES(ib(1,1,1,1)) + unr(1)*ty%VALUES(ib(2,1,1,1)))
530 . + unr(3) * (r(1)*ty%VALUES(ib(1,1,2,1)) + unr(1)*ty%VALUES(ib(2,1,2,1)))
533 yy = r(3) *(r(2) * (r(1)*ty%VALUES(ib(1,1,1,1)) + unr(1)*ty%VALUES(ib(2,1,1,1)))
534 . +unr(2) * (r(1)*ty%VALUES(ib(1,2,1,1)) + unr(1)*ty%VALUES(ib(2,2,1,1))))
535 . + unr(3) *(r(2) * (r(1)*ty%VALUES(ib(1,1,2,1)) + unr(1)*ty%VALUES(ib(2,1,2,1)))
536 . +unr(2) * (r(1)*ty%VALUES(ib(1,2,2,1)) + unr(1)*ty%VALUES(ib(2,2,2,1))))
540 . (r(3) * (r(2) * ( ty%VALUES(ib(2,1,1,1)) - ty%VALUES(ib(1,1,1,1)))
541 . + unr(2) * ( ty%VALUES(ib(2,2,1,1)) - ty%VALUES(ib(1,2,1,1))))
542 . + unr(3) * (r(2) * ( ty%VALUES(ib(2,1,2,1)) - ty%VALUES(ib(1,1,2,1)))
543 . +unr(2) * ( ty%VALUES(ib(2,2,2,1)) - ty%VALUES(ib(1,2,2,1)))))/
544 . (table%X(1)%VALUES(ipos(1)+1)-table%X(1)%VALUES(ipos(1)))
553 ib(l+1,m+1,1,1)=im+il
557 yy = (r(2)*(r(1)*ty%VALUES(ib(1,1,1,1)) + unr(1)*ty%VALUES(ib(2,1,1,1)))
558 . +unr(2)*(r(1)*ty%VALUES(ib(1,2,1,1)) + unr(1)*ty%VALUES(ib(2,2,1,1))))
561 . (r(2) * ( ty%VALUES(ib(2,1,1,1)) - ty%VALUES(ib(1,1,1,1)))
562 . + unr(2) * ( ty%VALUES(ib(2,2,1,1)) - ty%VALUES(ib(1,2,1,1))))/
563 . (table%X(1)%VALUES(ipos(1)+1)-table%X(1)%VALUES(ipos(1)))
569 yy = r(1) * ty%VALUES(ipos(1)) + unr(1) * ty%VALUES(ipos(1)+1)
571 dydx = (ty%VALUES(ipos(1)+1)-ty%VALUES(ipos(1)))/
572 . (table%X(1)%VALUES(ipos(1)+1)-table%X(1)%VALUES(ipos(1)))
627#include "implicit_f.inc"
632 INTEGER ,
INTENT(IN) :: NEL
633 INTEGER ,
VALUE ,
INTENT(IN) :: DIMX
634 INTEGER ,
DIMENSION(DIMX,TABLE%NDIM) :: IPOS
635 my_real ,
DIMENSION(DIMX,TABLE%NDIM) :: xx
636 my_real ,
DIMENSION(NEL) :: yy, dydx1
640 LOGICAL,
DIMENSION(NEL) :: NEED_TO_COMPUTE
641 INTEGER NDIM, K, NXK(4), I, IB(NEL,2,2,2,2),
642 . IP,IN,IM,IL,P,N,M,L,N1,N12,N123
643 my_real :: dx2,r(nel,4),unr(nel,4),dx2_0(nel)
645 INTEGER :: NINDX_1,M_INDX1,NINDX_2,M_INDX2
646 INTEGER,
DIMENSION(NEL) :: INDX_1,INDX_2
650 IF(
SIZE(xx,2) < table%NDIM )
THEN
651 CALL ancmsg(msgid=36,anmode=aninfo,
652 . c1=
'TABLE INTERPOLATION')
657 nxk(k)=
SIZE(table%X(k)%VALUES)
661 ipos(1:nel,k)=
max(ipos(1:nel,k),1)
666#include "vectorize.inc"
669 dx2_0(i) = table%X(k)%VALUES(m) - xx(i,k)
670 IF(dx2_0(i) >= zero)
THEN
671 nindx_1 = nindx_1 + 1
673 m_indx1 =
max(m_indx1,m)
675 nindx_2 = nindx_2 + 1
677 m_indx2 =
min(m_indx2,m)
681 need_to_compute(1:nindx_1) = .true.
683#include "vectorize.inc"
685 IF(need_to_compute(j))
THEN
688 dx2 = table%X(k)%VALUES(n) - xx(i,k)
689 IF(dx2<zero.OR.n <=1)
THEN
691 need_to_compute(j) = .false.
696 need_to_compute(1:nindx_2) = .true.
698#include "vectorize.inc"
700 IF(need_to_compute(j))
THEN
703 dx2 = table%X(k)%VALUES(n) - xx(i,k)
704 IF(dx2>=zero.OR.n==nxk(k))
THEN
706 need_to_compute(j) = .false.
714#include "vectorize.inc"
717 r(i,k) =(table%X(k)%VALUES(n+1)-xx(i,k))/
718 . (table%X(k)%VALUES(n+1)-table%X(k)%VALUES(n))
731 ip=n123*(ipos(i,4)-1+p)
733 in=n12*(ipos(i,3)-1+n)
735 im=n1*(ipos(i,2)-1+m)
738 ib(i,l+1,m+1,n+1,p+1)=ip+in+im+il
745 unr(1:nel,1:4)=one-r(1:nel,1:4)
746#include "vectorize.inc"
750 . r(i,4)*(r(i,3)*(r(i,2)*(r(i,1)*table%Y%VALUES(ib(i,1,1,1,1))
751 . +unr(i,1)*table%Y%VALUES(ib(i,2,1,1,1)))
752 . +unr(i,2)*(r(i,1)*table%Y%VALUES(ib(i,1,2,1,1))
753 . +unr(i,1)*table%Y%VALUES(ib(i,2,2,1,1))))
755 . +unr(i,1)*table%Y%VALUES(ib(i,2,1,2,1)))
756 . +unr(i,2)*(r(i,1)*table%Y%VALUES(ib(i,1,2,2,1))
757 . +unr(i,1)*table%Y%VALUES(ib(i,2,2,2,1)))))
758 . +unr(i,4)*(r(i,3)*(r(i,2)*(r(i,1)*table%Y%VALUES(ib(i,1,1,1,1))
759 . +unr(i,1)*table%Y%VALUES(ib(i,2,1,1,1)))
760 . +unr(i,2)*(r(i,1)*table%Y%VALUES(ib(i,1,2,1,1))
761 . +unr(i,1)*table%Y%VALUES(ib(i,2,2,1,1))))
762 . +unr(i,3)*(r(i,2)*(r(i,1)*table%Y%VALUES(ib(i,1,1,2,1))
763 . +unr(i,1)*table%Y%VALUES(ib(i,2,1,2,1)))
764 . +unr(i,2)*(r(i,1)*table%Y%VALUES(ib(i,1,2,2,1))
765 . +unr(i,1)*table%Y%VALUES(ib(i,2,2,2,1)))))
768 . (r(i,4)*(r(i,3)*(r(i,2)*( table%Y%VALUES(ib(i,2,1,1,1))
769 . -table%Y%VALUES(ib(i,1,1,1,1)))
770 . +unr(i,2)*( table%Y%VALUES(ib(i,2,2,1,1))
771 . -table%Y%VALUES(ib(i,1,2,1,1))))
772 . +unr(i,3)*(r(i,2)*( table%Y%VALUES(ib(i,2,1,2,1))
773 . -table%Y%VALUES(ib(i,1,1,2,1)))
774 . +unr(i,2)*( table%Y%VALUES(ib(i,2,2,2,1))
775 . -table%Y%VALUES(ib(i,1,2,2,1)))))
776 . +unr(i,4)*(r(i,3)*(r(i,2)*( table%Y%VALUES(ib(i,2,1,1,1))
777 . -table%Y%VALUES(ib(i,1,1,1,1)))
778 . +unr(i,2)*( table%Y%VALUES(ib(i,2,2,1,1))
779 . -table%Y%VALUES(ib(i,1,2,1,1))))
780 . +unr(i,3)*(r(i,2)*( table%Y%VALUES(ib(i,2,1,2,1))
781 . -table%Y%VALUES(ib(i,1,1,2,1)))
782 . +unr(i,2)*( table%Y%VALUES(ib(i,2,2,2,1))
783 . -table%Y%VALUES(ib(i,1,2,2,1))))))/
784 . (table%X(1)%VALUES(ipos(i,1)+1)-table%X(1)%VALUES(ipos(i,1)))
794 in=n12*(ipos(i,3)-1+n)
796 im=n1*(ipos(i,2)-1+m)
799 ib(i,l+1,m+1,n+1,1)=in+im+il
805 unr(1:nel,1:3)=one-r(1:nel,1:3)
806#include "vectorize.inc"
810 . (r(i,3)*(r(i,2)*(r(i,1)*table%Y%VALUES(ib(i,1,1,1,1))
811 . +unr(i,1)*table%Y%VALUES(ib(i,2,1,1,1)))
812 . +unr(i,2)*(r(i,1)*table%Y%VALUES(ib(i,1,2,1,1))
813 . +unr(i,1)*table%Y%VALUES(ib(i,2,2,1,1))))
814 . +unr(i,3)*(r(i,2)*(r(i,1)*table%Y%VALUES(ib(i,1,1,2,1))
815 . +unr(i,1)*table%Y%VALUES(ib(i,2,1,2,1)))
816 . +unr(i,2)*(r(i,1)*table%Y%VALUES(ib(i,1,2,2,1))
817 . +unr(i,1)*table%Y%VALUES(ib(i,2,2,2,1)))))
820 . (r(i,3)*(r(i,2)*( table%Y%VALUES(ib(i,2,1,1,1))
821 . -table%Y%VALUES(ib(i,1,1,1,1)))
822 . +unr(i,2)*( table%Y%VALUES(ib(i,2,2,1,1))
823 . -table%Y%VALUES(ib(i,1,2,1,1))))
824 . +unr(i,3)*(r(i,2)*( table%Y%VALUES(ib(i,2,1,2,1))
825 . -table%Y%VALUES(ib(i,1,1,2,1)))
826 . +unr(i,2)*( table%Y%VALUES(ib(i,2,2,2,1))
827 . -table%Y%VALUES(ib(i,1,2,2,1)))))/
828 . (table%X(1)%VALUES(ipos(i,1)+1)-table%X(1)%VALUES(ipos(i,1)))
837 im=n1*(ipos(i,2)-1+m)
840 ib(i,l+1,m+1,1,1)=im+il
845 unr(1:nel,1:2)=one-r(1:nel,1:2)
846#include "vectorize.inc"
850 . (r(i,2)*(r(i,1)*table%Y%VALUES(ib(i,1,1,1,1))
851 . +unr(i,1)*table%Y%VALUES(ib(i,2,1,1,1)))
852 . +unr(i,2)*(r(i,1)*table%Y%VALUES(ib(i,1,2,1,1))
853 . +unr(i,1)*table%Y%VALUES(ib(i,2,2,1,1))))
855 . (r(i,2)*( table%Y%VALUES(ib(i,2,1,1,1))
856 . -table%Y%VALUES(ib(i,1,1,1,1)))
857 . +unr(i,2)*( table%Y%VALUES(ib(i,2,2,1,1))
858 . -table%Y%VALUES(ib(i,1,2,1,1))))/
859 . (table%X(1)%VALUES(ipos(i,1)+1)-table%X(1)%VALUES(ipos(i,1)))
864 unr(1:nel,1:1)=one-r(1:nel,1:1)
865#include "vectorize.inc"
868 yy(i)= r(i,1)*table%Y%VALUES(ipos(i,1))
869 . +unr(i,1)*table%Y%VALUES(ipos(i,1)+1)
870 dydx1(i)=(table%Y%VALUES(ipos(i,1)+1)-table%Y%VALUES(ipos(i,1)))/
871 . (table%X(1)%VALUES(ipos(i,1)+1)-table%X(1)%VALUES(ipos(i,1)))