Index: /branches/eam_rel8_b1/psLib/src/math/psPolynomial.c
===================================================================
--- /branches/eam_rel8_b1/psLib/src/math/psPolynomial.c	(revision 5565)
+++ /branches/eam_rel8_b1/psLib/src/math/psPolynomial.c	(revision 5566)
@@ -7,6 +7,6 @@
 *  polynomials.  It also contains a Gaussian functions.
 *
-*  @version $Revision: 1.130.4.1 $ $Name: not supported by cvs2svn $
-*  @date $Date: 2005-11-18 03:05:52 $
+*  @version $Revision: 1.130.4.1.2.1 $ $Name: not supported by cvs2svn $
+*  @date $Date: 2005-11-22 18:04:28 $
 *
 *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
@@ -823,4 +823,5 @@
 }
 
+// this function must accept F32 and F64 input x vectors
 psVector *psPolynomial1DEvalVector(const psPolynomial1D *poly,
                                    const psVector *x)
@@ -828,13 +829,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(x, PS_TYPE_F64, 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) {
+    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);
 }
@@ -858,4 +871,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,
@@ -877,12 +892,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) {
+    case PS_TYPE_F32:
+        if (y->type != x->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 != x->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);
