820{
821
822
823
824
826
827 Data_T ret;
828
829 FIELD3D_VEC3_T<double> p(vsP.x , vsP.y - 0.5, vsP.z - 0.5);
830
831
832
833
834 V3i c1(
static_cast<int>(
floor(p.x)),
835 static_cast<int>(
floor(p.y)),
836 static_cast<int>(
floor(p.z)));
837
838
840
841
842 FIELD3D_VEC3_T<double> f1(static_cast<FIELD3D_VEC3_T<double> >(c2) - p);
843
844 FIELD3D_VEC3_T<double> f2(static_cast<FIELD3D_VEC3_T<double> >(1.0) - f1);
845
846
853
854 ret.x = (f1.x * (f1.y * (f1.z * data.
u(c1.x, c1.y, c1.z) +
855 f2.z * data.
u(c1.x, c1.y, c2.z)) +
856 f2.y * (f1.z * data.
u(c1.x, c2.y, c1.z) +
857 f2.z * data.
u(c1.x, c2.y, c2.z))) +
858 f2.x * (f1.y * (f1.z * data.
u(c2.x, c1.y, c1.z) +
859 f2.z * data.
u(c2.x, c1.y, c2.z)) +
860 f2.y * (f1.z * data.
u(c2.x, c2.y, c1.z) +
861 f2.z * data.
u(c2.x, c2.y, c2.z))));
862
863
864
865 p.setValue(vsP.x - 0.5, vsP.y , vsP.z - 0.5);
866
867
868 c1.x =
static_cast<int>(
floor(p.x ));
869 c1.y =
static_cast<int>(
floor(p.y ));
870 c1.z =
static_cast<int>(
floor(p.z ));
871
872
873 c2.x = c1.x + 1;
874 c2.y = c1.y + 1;
875 c2.z = c1.z + 1;
876
877
878 f1.setValue(static_cast<FIELD3D_VEC3_T<double> >(c2) - p);
879
880 f2.setValue(static_cast<FIELD3D_VEC3_T<double> >(1.0) - f1);
881
882
889
890 ret.y = (f1.x * (f1.y * (f1.z * data.
v(c1.x, c1.y, c1.z) +
891 f2.z * data.
v(c1.x, c1.y, c2.z)) +
892 f2.y * (f1.z * data.
v(c1.x, c2.y, c1.z) +
893 f2.z * data.
v(c1.x, c2.y, c2.z))) +
894 f2.x * (f1.y * (f1.z * data.
v(c2.x, c1.y, c1.z) +
895 f2.z * data.
v(c2.x, c1.y, c2.z)) +
896 f2.y * (f1.z * data.
v(c2.x, c2.y, c1.z) +
897 f2.z * data.
v(c2.x, c2.y, c2.z))));
898
899
900
901 p.setValue(vsP.x - 0.5 , vsP.y - 0.5, vsP.z);
902
903
904 c1.x =
static_cast<int>(
floor(p.x ));
905 c1.y =
static_cast<int>(
floor(p.y ));
906 c1.z =
static_cast<int>(
floor(p.z ));
907
908
909 c2.x = c1.x + 1;
910 c2.y = c1.y + 1;
911 c2.z = c1.z + 1;
912
913
914 f1.setValue(static_cast<FIELD3D_VEC3_T<double> >(c2) - p);
915
916 f2.setValue(static_cast<FIELD3D_VEC3_T<double> >(1.0) - f1);
917
918
925
926 ret.z = (f1.x * (f1.y * (f1.z * data.
w(c1.x, c1.y, c1.z) +
927 f2.z * data.
w(c1.x, c1.y, c2.z)) +
928 f2.y * (f1.z * data.
w(c1.x, c2.y, c1.z) +
929 f2.z * data.
w(c1.x, c2.y, c2.z))) +
930 f2.x * (f1.y * (f1.z * data.
w(c2.x, c1.y, c1.z) +
931 f2.z * data.
w(c2.x, c1.y, c2.z)) +
932 f2.y * (f1.z * data.
w(c2.x, c2.y, c1.z) +
933 f2.z * data.
w(c2.x, c2.y, c2.z))));
934
935 return ret;
936}
const Box3i & dataWindow() const
Returns the data window. Any coordinate inside this window is safe to pass to value() in the Field su...
const real_t & w(int i, int j, int k) const
Read access to value on w-facing wall.
const real_t & u(int i, int j, int k) const
Read access to value on u-facing wall.
const real_t & v(int i, int j, int k) const
Read access to value on v-facing wall.
T max(const T a, const T2 b)
Max operation on mixed types.
T min(const T a, const T2 b)
Min operation on mixed types.
FIELD3D_VEC3_T< T > floor(const FIELD3D_VEC3_T< T > &v)
Floor function for Vec3.