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