Index: trunk/psLib/src/math/psPolynomial.c
===================================================================
--- trunk/psLib/src/math/psPolynomial.c	(revision 5576)
+++ trunk/psLib/src/math/psPolynomial.c	(revision 5624)
@@ -7,6 +7,6 @@
 *  polynomials.  It also contains a Gaussian functions.
 *
-*  @version $Revision: 1.132 $ $Name: not supported by cvs2svn $
-*  @date $Date: 2005-11-22 21:40:40 $
+*  @version $Revision: 1.133 $ $Name: not supported by cvs2svn $
+*  @date $Date: 2005-11-30 02:00:09 $
 *
 *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
@@ -725,10 +725,9 @@
 }
 
-psPolynomial4D* psPolynomial4DAlloc(
-    unsigned int nX,
-    unsigned int nY,
-    unsigned int nZ,
-    unsigned int nT,
-    psPolynomialType type)
+psPolynomial4D* psPolynomial4DAlloc( unsigned int nX,
+                                     unsigned int nY,
+                                     unsigned int nZ,
+                                     unsigned int nT,
+                                     psPolynomialType type)
 {
     PS_ASSERT_INT_NONNEGATIVE(nX, NULL);
@@ -785,26 +784,4 @@
 }
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
 psF64 psPolynomial1DEval(const psPolynomial1D* poly,
                          psF64 x)
@@ -824,4 +801,5 @@
 }
 
+// this function must accept F32 and F64 input x vectors
 psVector *psPolynomial1DEvalVector(const psPolynomial1D *poly,
                                    const psVector *x)
@@ -829,13 +807,25 @@
     PS_ASSERT_POLY_NON_NULL(poly, NULL);
     PS_ASSERT_VECTOR_NON_NULL(x, NULL);
-    PS_ASSERT_VECTOR_TYPE(x, PS_TYPE_F64, NULL);
+    PS_ASSERT_VECTOR_TYPE_F32_OR_F64(x, NULL);
 
     psVector *tmp;
 
-    tmp = psVectorAlloc(x->n, PS_TYPE_F64);
-    for (unsigned int i=0;i<x->n;i++) {
-        tmp->data.F64[i] = psPolynomial1DEval(poly, x->data.F64[i]);
-    }
-
+    switch (x->type.type) {
+    case PS_TYPE_F64:
+        tmp = psVectorAlloc(x->n, PS_TYPE_F64);
+        for (unsigned int i=0;i<x->n;i++) {
+            tmp->data.F64[i] = psPolynomial1DEval(poly, x->data.F64[i]);
+        }
+        break;
+    case PS_TYPE_F32:
+        tmp = psVectorAlloc(x->n, PS_TYPE_F32);
+        for (unsigned int i=0;i<x->n;i++) {
+            tmp->data.F32[i] = psPolynomial1DEval(poly, x->data.F32[i]);
+        }
+        break;
+    default:
+        psError(PS_ERR_UNKNOWN, false, "invalid input data type.\n");
+        return (NULL);
+    }
     return(tmp);
 }
@@ -859,4 +849,6 @@
 }
 
+// this function must support input data types of F32 and F64
+// all input vectors data types must match (all F32 or all F64)
 psVector *psPolynomial2DEvalVector(const psPolynomial2D *poly,
                                    const psVector *x,
@@ -866,7 +858,7 @@
     PS_ASSERT_POLY_NON_NULL(poly, NULL);
     PS_ASSERT_VECTOR_NON_NULL(x, NULL);
-    PS_ASSERT_VECTOR_TYPE(x, PS_TYPE_F64, NULL);
+    PS_ASSERT_VECTOR_TYPE_F32_OR_F64(x, NULL);
     PS_ASSERT_VECTOR_NON_NULL(y, NULL);
-    PS_ASSERT_VECTOR_TYPE(y, PS_TYPE_F64, NULL);
+    PS_ASSERT_VECTOR_TYPE_F32_OR_F64(y, NULL);
 
     psVector *tmp;
@@ -878,12 +870,37 @@
     }
 
-    // Create output vector to return
-    tmp = psVectorAlloc(vecLen, PS_TYPE_F64);
-
-    // Evaluate the polynomial at the specified points
-    for (unsigned int i=0; i<vecLen; i++) {
-        tmp->data.F64[i] = psPolynomial2DEval(poly,x->data.F64[i],y->data.F64[i]);
-    }
-
+    switch (x->type.type) {
+    case PS_TYPE_F32:
+        if (y->type.type != x->type.type) {
+            psError(PS_ERR_UNKNOWN, true, "type mismatch in data vectors");
+            return (NULL);
+        }
+
+        // Create output vector to return
+        tmp = psVectorAlloc(vecLen, PS_TYPE_F32);
+
+        // Evaluate the polynomial at the specified points
+        for (unsigned int i=0; i<vecLen; i++) {
+            tmp->data.F32[i] = psPolynomial2DEval(poly,x->data.F32[i],y->data.F32[i]);
+        }
+        break;
+    case PS_TYPE_F64:
+        if (y->type.type != x->type.type) {
+            psError(PS_ERR_UNKNOWN, true, "type mismatch in data vectors");
+            return (NULL);
+        }
+
+        // Create output vector to return
+        tmp = psVectorAlloc(vecLen, PS_TYPE_F64);
+
+        // Evaluate the polynomial at the specified points
+        for (unsigned int i=0; i<vecLen; i++) {
+            tmp->data.F64[i] = psPolynomial2DEval(poly,x->data.F64[i],y->data.F64[i]);
+        }
+        break;
+    default:
+        psError(PS_ERR_UNKNOWN, false, "invalid input data type.\n");
+        return (NULL);
+    }
     // Return output vector
     return(tmp);
