741{
751 double ipartx, iparty, ipartz, tx, ty, tz;
752 tx = modf (ux, &ipartx); int ix = (int) ipartx;
753 ty = modf (uy, &iparty); int iy = (int) iparty;
754 tz = modf (uz, &ipartz); int iz = (int) ipartz;
755
756
757
758
759
760
761
762
763 double tpx[4], tpy[4], tpz[4], a[4],
b[4], c[4], da[4], db[4], dc[4],
764 d2a[4], d2b[4], d2c[4], cP[16], dcP[16], d2cP[16], bcP[4], dbcP[4],
765 d2bcP[4], dbdcP[4], bd2cP[4], bdcP[4];
766 tpx[0] = tx*tx*tx; tpx[1] = tx*tx; tpx[2] = tx; tpx[3] = 1.0;
767 tpy[0] = ty*ty*ty; tpy[1] = ty*ty; tpy[2] = ty; tpy[3] = 1.0;
768 tpz[0] = tz*tz*tz; tpz[1] = tz*tz; tpz[2] = tz; tpz[3] = 1.0;
770
771 a[0] = (
Ad[ 0]*tpx[0] +
Ad[ 1]*tpx[1] +
Ad[ 2]*tpx[2] +
Ad[ 3]*tpx[3]);
772 a[1] = (
Ad[ 4]*tpx[0] +
Ad[ 5]*tpx[1] +
Ad[ 6]*tpx[2] +
Ad[ 7]*tpx[3]);
773 a[2] = (
Ad[ 8]*tpx[0] +
Ad[ 9]*tpx[1] +
Ad[10]*tpx[2] +
Ad[11]*tpx[3]);
774 a[3] = (
Ad[12]*tpx[0] +
Ad[13]*tpx[1] +
Ad[14]*tpx[2] +
Ad[15]*tpx[3]);
775 da[0] = (
dAd[ 1]*tpx[1] +
dAd[ 2]*tpx[2] +
dAd[ 3]*tpx[3]);
776 da[1] = (
dAd[ 5]*tpx[1] +
dAd[ 6]*tpx[2] +
dAd[ 7]*tpx[3]);
777 da[2] = (
dAd[ 9]*tpx[1] +
dAd[10]*tpx[2] +
dAd[11]*tpx[3]);
778 da[3] = (
dAd[13]*tpx[1] +
dAd[14]*tpx[2] +
dAd[15]*tpx[3]);
779 d2a[0] = (
d2Ad[ 2]*tpx[2] +
d2Ad[ 3]*tpx[3]);
780 d2a[1] = (
d2Ad[ 6]*tpx[2] +
d2Ad[ 7]*tpx[3]);
781 d2a[2] = (
d2Ad[10]*tpx[2] +
d2Ad[11]*tpx[3]);
782 d2a[3] = (
d2Ad[14]*tpx[2] +
d2Ad[15]*tpx[3]);
783
784 b[0] = (
Ad[ 0]*tpy[0] +
Ad[ 1]*tpy[1] +
Ad[ 2]*tpy[2] +
Ad[ 3]*tpy[3]);
785 b[1] = (
Ad[ 4]*tpy[0] +
Ad[ 5]*tpy[1] +
Ad[ 6]*tpy[2] +
Ad[ 7]*tpy[3]);
786 b[2] = (
Ad[ 8]*tpy[0] +
Ad[ 9]*tpy[1] +
Ad[10]*tpy[2] +
Ad[11]*tpy[3]);
787 b[3] = (
Ad[12]*tpy[0] +
Ad[13]*tpy[1] +
Ad[14]*tpy[2] +
Ad[15]*tpy[3]);
788 db[0] = (
dAd[ 1]*tpy[1] +
dAd[ 2]*tpy[2] +
dAd[ 3]*tpy[3]);
789 db[1] = (
dAd[ 5]*tpy[1] +
dAd[ 6]*tpy[2] +
dAd[ 7]*tpy[3]);
790 db[2] = (
dAd[ 9]*tpy[1] +
dAd[10]*tpy[2] +
dAd[11]*tpy[3]);
791 db[3] = (
dAd[13]*tpy[1] +
dAd[14]*tpy[2] +
dAd[15]*tpy[3]);
792 d2b[0] = (
d2Ad[ 2]*tpy[2] +
d2Ad[ 3]*tpy[3]);
793 d2b[1] = (
d2Ad[ 6]*tpy[2] +
d2Ad[ 7]*tpy[3]);
794 d2b[2] = (
d2Ad[10]*tpy[2] +
d2Ad[11]*tpy[3]);
795 d2b[3] = (
d2Ad[14]*tpy[2] +
d2Ad[15]*tpy[3]);
796
797 c[0] = (
Ad[ 0]*tpz[0] +
Ad[ 1]*tpz[1] +
Ad[ 2]*tpz[2] +
Ad[ 3]*tpz[3]);
798 c[1] = (
Ad[ 4]*tpz[0] +
Ad[ 5]*tpz[1] +
Ad[ 6]*tpz[2] +
Ad[ 7]*tpz[3]);
799 c[2] = (
Ad[ 8]*tpz[0] +
Ad[ 9]*tpz[1] +
Ad[10]*tpz[2] +
Ad[11]*tpz[3]);
800 c[3] = (
Ad[12]*tpz[0] +
Ad[13]*tpz[1] +
Ad[14]*tpz[2] +
Ad[15]*tpz[3]);
801 dc[0] = (
dAd[ 1]*tpz[1] +
dAd[ 2]*tpz[2] +
dAd[ 3]*tpz[3]);
802 dc[1] = (
dAd[ 5]*tpz[1] +
dAd[ 6]*tpz[2] +
dAd[ 7]*tpz[3]);
803 dc[2] = (
dAd[ 9]*tpz[1] +
dAd[10]*tpz[2] +
dAd[11]*tpz[3]);
804 dc[3] = (
dAd[13]*tpz[1] +
dAd[14]*tpz[2] +
dAd[15]*tpz[3]);
805 d2c[0] = (
d2Ad[ 2]*tpz[2] +
d2Ad[ 3]*tpz[3]);
806 d2c[1] = (
d2Ad[ 6]*tpz[2] +
d2Ad[ 7]*tpz[3]);
807 d2c[2] = (
d2Ad[10]*tpz[2] +
d2Ad[11]*tpz[3]);
808 d2c[3] = (
d2Ad[14]*tpz[2] +
d2Ad[15]*tpz[3]);
809
812 int offmax = (ix+3)*xs + (iy+3)*ys + iz+3;
813
814
815
816
817
818#define P(i,j,k) coefs[(ix+(i))*xs+(iy+(j))*ys+(iz+(k))]
819 cP[ 0] = (
P(0,0,0)*c[0]+
P(0,0,1)*c[1]+
P(0,0,2)*c[2]+
P(0,0,3)*c[3]);
820 cP[ 1] = (
P(0,1,0)*c[0]+
P(0,1,1)*c[1]+
P(0,1,2)*c[2]+
P(0,1,3)*c[3]);
821 cP[ 2] = (
P(0,2,0)*c[0]+
P(0,2,1)*c[1]+
P(0,2,2)*c[2]+
P(0,2,3)*c[3]);
822 cP[ 3] = (
P(0,3,0)*c[0]+
P(0,3,1)*c[1]+
P(0,3,2)*c[2]+
P(0,3,3)*c[3]);
823 cP[ 4] = (
P(1,0,0)*c[0]+
P(1,0,1)*c[1]+
P(1,0,2)*c[2]+
P(1,0,3)*c[3]);
824 cP[ 5] = (
P(1,1,0)*c[0]+
P(1,1,1)*c[1]+
P(1,1,2)*c[2]+
P(1,1,3)*c[3]);
825 cP[ 6] = (
P(1,2,0)*c[0]+
P(1,2,1)*c[1]+
P(1,2,2)*c[2]+
P(1,2,3)*c[3]);
826 cP[ 7] = (
P(1,3,0)*c[0]+
P(1,3,1)*c[1]+
P(1,3,2)*c[2]+
P(1,3,3)*c[3]);
827 cP[ 8] = (
P(2,0,0)*c[0]+
P(2,0,1)*c[1]+
P(2,0,2)*c[2]+
P(2,0,3)*c[3]);
828 cP[ 9] = (
P(2,1,0)*c[0]+
P(2,1,1)*c[1]+
P(2,1,2)*c[2]+
P(2,1,3)*c[3]);
829 cP[10] = (
P(2,2,0)*c[0]+
P(2,2,1)*c[1]+
P(2,2,2)*c[2]+
P(2,2,3)*c[3]);
830 cP[11] = (
P(2,3,0)*c[0]+
P(2,3,1)*c[1]+
P(2,3,2)*c[2]+
P(2,3,3)*c[3]);
831 cP[12] = (
P(3,0,0)*c[0]+
P(3,0,1)*c[1]+
P(3,0,2)*c[2]+
P(3,0,3)*c[3]);
832 cP[13] = (
P(3,1,0)*c[0]+
P(3,1,1)*c[1]+
P(3,1,2)*c[2]+
P(3,1,3)*c[3]);
833 cP[14] = (
P(3,2,0)*c[0]+
P(3,2,1)*c[1]+
P(3,2,2)*c[2]+
P(3,2,3)*c[3]);
834 cP[15] = (
P(3,3,0)*c[0]+
P(3,3,1)*c[1]+
P(3,3,2)*c[2]+
P(3,3,3)*c[3]);
835
836 dcP[ 0] = (
P(0,0,0)*dc[0]+
P(0,0,1)*dc[1]+
P(0,0,2)*dc[2]+
P(0,0,3)*dc[3]);
837 dcP[ 1] = (
P(0,1,0)*dc[0]+
P(0,1,1)*dc[1]+
P(0,1,2)*dc[2]+
P(0,1,3)*dc[3]);
838 dcP[ 2] = (
P(0,2,0)*dc[0]+
P(0,2,1)*dc[1]+
P(0,2,2)*dc[2]+
P(0,2,3)*dc[3]);
839 dcP[ 3] = (
P(0,3,0)*dc[0]+
P(0,3,1)*dc[1]+
P(0,3,2)*dc[2]+
P(0,3,3)*dc[3]);
840 dcP[ 4] = (
P(1,0,0)*dc[0]+
P(1,0,1)*dc[1]+
P(1,0,2)*dc[2]+
P(1,0,3)*dc[3]);
841 dcP[ 5] = (
P(1,1,0)*dc[0]+
P(1,1,1)*dc[1]+
P(1,1,2)*dc[2]+
P(1,1,3)*dc[3]);
842 dcP[ 6] = (
P(1,2,0)*dc[0]+
P(1,2,1)*dc[1]+
P(1,2,2)*dc[2]+
P(1,2,3)*dc[3]);
843 dcP[ 7] = (
P(1,3,0)*dc[0]+
P(1,3,1)*dc[1]+
P(1,3,2)*dc[2]+
P(1,3,3)*dc[3]);
844 dcP[ 8] = (
P(2,0,0)*dc[0]+
P(2,0,1)*dc[1]+
P(2,0,2)*dc[2]+
P(2,0,3)*dc[3]);
845 dcP[ 9] = (
P(2,1,0)*dc[0]+
P(2,1,1)*dc[1]+
P(2,1,2)*dc[2]+
P(2,1,3)*dc[3]);
846 dcP[10] = (
P(2,2,0)*dc[0]+
P(2,2,1)*dc[1]+
P(2,2,2)*dc[2]+
P(2,2,3)*dc[3]);
847 dcP[11] = (
P(2,3,0)*dc[0]+
P(2,3,1)*dc[1]+
P(2,3,2)*dc[2]+
P(2,3,3)*dc[3]);
848 dcP[12] = (
P(3,0,0)*dc[0]+
P(3,0,1)*dc[1]+
P(3,0,2)*dc[2]+
P(3,0,3)*dc[3]);
849 dcP[13] = (
P(3,1,0)*dc[0]+
P(3,1,1)*dc[1]+
P(3,1,2)*dc[2]+
P(3,1,3)*dc[3]);
850 dcP[14] = (
P(3,2,0)*dc[0]+
P(3,2,1)*dc[1]+
P(3,2,2)*dc[2]+
P(3,2,3)*dc[3]);
851 dcP[15] = (
P(3,3,0)*dc[0]+
P(3,3,1)*dc[1]+
P(3,3,2)*dc[2]+
P(3,3,3)*dc[3]);
852
853 d2cP[ 0] = (
P(0,0,0)*d2c[0]+
P(0,0,1)*d2c[1]+
P(0,0,2)*d2c[2]+
P(0,0,3)*d2c[3]);
854 d2cP[ 1] = (
P(0,1,0)*d2c[0]+
P(0,1,1)*d2c[1]+
P(0,1,2)*d2c[2]+
P(0,1,3)*d2c[3]);
855 d2cP[ 2] = (
P(0,2,0)*d2c[0]+
P(0,2,1)*d2c[1]+
P(0,2,2)*d2c[2]+
P(0,2,3)*d2c[3]);
856 d2cP[ 3] = (
P(0,3,0)*d2c[0]+
P(0,3,1)*d2c[1]+
P(0,3,2)*d2c[2]+
P(0,3,3)*d2c[3]);
857 d2cP[ 4] = (
P(1,0,0)*d2c[0]+
P(1,0,1)*d2c[1]+
P(1,0,2)*d2c[2]+
P(1,0,3)*d2c[3]);
858 d2cP[ 5] = (
P(1,1,0)*d2c[0]+
P(1,1,1)*d2c[1]+
P(1,1,2)*d2c[2]+
P(1,1,3)*d2c[3]);
859 d2cP[ 6] = (
P(1,2,0)*d2c[0]+
P(1,2,1)*d2c[1]+
P(1,2,2)*d2c[2]+
P(1,2,3)*d2c[3]);
860 d2cP[ 7] = (
P(1,3,0)*d2c[0]+
P(1,3,1)*d2c[1]+
P(1,3,2)*d2c[2]+
P(1,3,3)*d2c[3]);
861 d2cP[ 8] = (
P(2,0,0)*d2c[0]+
P(2,0,1)*d2c[1]+
P(2,0,2)*d2c[2]+
P(2,0,3)*d2c[3]);
862 d2cP[ 9] = (
P(2,1,0)*d2c[0]+
P(2,1,1)*d2c[1]+
P(2,1,2)*d2c[2]+
P(2,1,3)*d2c[3]);
863 d2cP[10] = (
P(2,2,0)*d2c[0]+
P(2,2,1)*d2c[1]+
P(2,2,2)*d2c[2]+
P(2,2,3)*d2c[3]);
864 d2cP[11] = (
P(2,3,0)*d2c[0]+
P(2,3,1)*d2c[1]+
P(2,3,2)*d2c[2]+
P(2,3,3)*d2c[3]);
865 d2cP[12] = (
P(3,0,0)*d2c[0]+
P(3,0,1)*d2c[1]+
P(3,0,2)*d2c[2]+
P(3,0,3)*d2c[3]);
866 d2cP[13] = (
P(3,1,0)*d2c[0]+
P(3,1,1)*d2c[1]+
P(3,1,2)*d2c[2]+
P(3,1,3)*d2c[3]);
867 d2cP[14] = (
P(3,2,0)*d2c[0]+
P(3,2,1)*d2c[1]+
P(3,2,2)*d2c[2]+
P(3,2,3)*d2c[3]);
868 d2cP[15] = (
P(3,3,0)*d2c[0]+
P(3,3,1)*d2c[1]+
P(3,3,2)*d2c[2]+
P(3,3,3)*d2c[3]);
869
870 bcP[0] = (
b[0]*cP[ 0] +
b[1]*cP[ 1] +
b[2]*cP[ 2] +
b[3]*cP[ 3]);
871 bcP[1] = (
b[0]*cP[ 4] +
b[1]*cP[ 5] +
b[2]*cP[ 6] +
b[3]*cP[ 7]);
872 bcP[2] = (
b[0]*cP[ 8] +
b[1]*cP[ 9] +
b[2]*cP[10] +
b[3]*cP[11]);
873 bcP[3] = (
b[0]*cP[12] +
b[1]*cP[13] +
b[2]*cP[14] +
b[3]*cP[15]);
874
875 dbcP[0] = ( db[0]*cP[ 0] + db[1]*cP[ 1] + db[2]*cP[ 2] + db[3]*cP[ 3]);
876 dbcP[1] = ( db[0]*cP[ 4] + db[1]*cP[ 5] + db[2]*cP[ 6] + db[3]*cP[ 7]);
877 dbcP[2] = ( db[0]*cP[ 8] + db[1]*cP[ 9] + db[2]*cP[10] + db[3]*cP[11]);
878 dbcP[3] = ( db[0]*cP[12] + db[1]*cP[13] + db[2]*cP[14] + db[3]*cP[15]);
879
880 bdcP[0] = (
b[0]*dcP[ 0] +
b[1]*dcP[ 1] +
b[2]*dcP[ 2] +
b[3]*dcP[ 3]);
881 bdcP[1] = (
b[0]*dcP[ 4] +
b[1]*dcP[ 5] +
b[2]*dcP[ 6] +
b[3]*dcP[ 7]);
882 bdcP[2] = (
b[0]*dcP[ 8] +
b[1]*dcP[ 9] +
b[2]*dcP[10] +
b[3]*dcP[11]);
883 bdcP[3] = (
b[0]*dcP[12] +
b[1]*dcP[13] +
b[2]*dcP[14] +
b[3]*dcP[15]);
884
885 bd2cP[0] = (
b[0]*d2cP[ 0] +
b[1]*d2cP[ 1] +
b[2]*d2cP[ 2] +
b[3]*d2cP[ 3]);
886 bd2cP[1] = (
b[0]*d2cP[ 4] +
b[1]*d2cP[ 5] +
b[2]*d2cP[ 6] +
b[3]*d2cP[ 7]);
887 bd2cP[2] = (
b[0]*d2cP[ 8] +
b[1]*d2cP[ 9] +
b[2]*d2cP[10] +
b[3]*d2cP[11]);
888 bd2cP[3] = (
b[0]*d2cP[12] +
b[1]*d2cP[13] +
b[2]*d2cP[14] +
b[3]*d2cP[15]);
889
890 d2bcP[0] = ( d2b[0]*cP[ 0] + d2b[1]*cP[ 1] + d2b[2]*cP[ 2] + d2b[3]*cP[ 3]);
891 d2bcP[1] = ( d2b[0]*cP[ 4] + d2b[1]*cP[ 5] + d2b[2]*cP[ 6] + d2b[3]*cP[ 7]);
892 d2bcP[2] = ( d2b[0]*cP[ 8] + d2b[1]*cP[ 9] + d2b[2]*cP[10] + d2b[3]*cP[11]);
893 d2bcP[3] = ( d2b[0]*cP[12] + d2b[1]*cP[13] + d2b[2]*cP[14] + d2b[3]*cP[15]);
894
895 dbdcP[0] = ( db[0]*dcP[ 0] + db[1]*dcP[ 1] + db[2]*dcP[ 2] + db[3]*dcP[ 3]);
896 dbdcP[1] = ( db[0]*dcP[ 4] + db[1]*dcP[ 5] + db[2]*dcP[ 6] + db[3]*dcP[ 7]);
897 dbdcP[2] = ( db[0]*dcP[ 8] + db[1]*dcP[ 9] + db[2]*dcP[10] + db[3]*dcP[11]);
898 dbdcP[3] = ( db[0]*dcP[12] + db[1]*dcP[13] + db[2]*dcP[14] + db[3]*dcP[15]);
899
900 *val = a[0]*bcP[0] + a[1]*bcP[1] + a[2]*bcP[2] + a[3]*bcP[3];
902 (da[0] *bcP[0] + da[1]*bcP[1] + da[2]*bcP[2] + da[3]*bcP[3]);
904 (a[0]*dbcP[0] + a[1]*dbcP[1] + a[2]*dbcP[2] + a[3]*dbcP[3]);
906 (a[0]*bdcP[0] + a[1]*bdcP[1] + a[2]*bdcP[2] + a[3]*bdcP[3]);
907
909 (d2a[0]*bcP[0] + d2a[1]*bcP[1] + d2a[2]*bcP[2] + d2a[3]*bcP[3]);
910
912 (da[0]*dbcP[0] + da[1]*dbcP[1] + da[2]*dbcP[2] + da[3]*dbcP[3]);
913 hess[3] = hess[1];
914
916 (da[0]*bdcP[0] + da[1]*bdcP[1] + da[2]*bdcP[2] + da[3]*bdcP[3]);
917 hess[6] = hess[2];
918
920 (a[0]*d2bcP[0] + a[1]*d2bcP[1] + a[2]*d2bcP[2] + a[3]*d2bcP[3]);
921
923 (a[0]*dbdcP[0] + a[1]*dbdcP[1] + a[2]*dbdcP[2] + a[3]*dbdcP[3]);
924 hess[7] = hess[5];
925
927 (a[0]*bd2cP[0] + a[1]*bd2cP[1] + a[2]*bd2cP[2] + a[3]*bd2cP[3]);
928#undef P
929
930}