[cig-commits] r18917 - in cs/spatialdata/trunk/libsrc: spatialdb units

brad at geodynamics.org brad at geodynamics.org
Thu Sep 15 19:03:31 PDT 2011


Author: brad
Date: 2011-09-15 19:03:30 -0700 (Thu, 15 Sep 2011)
New Revision: 18917

Modified:
   cs/spatialdata/trunk/libsrc/spatialdb/SimpleIOAscii.cc
   cs/spatialdata/trunk/libsrc/spatialdb/SpatialDB.cc
   cs/spatialdata/trunk/libsrc/spatialdb/SpatialDB.hh
   cs/spatialdata/trunk/libsrc/units/Nondimensional.hh
   cs/spatialdata/trunk/libsrc/units/Nondimensional.icc
Log:
Added float routines.

Modified: cs/spatialdata/trunk/libsrc/spatialdb/SimpleIOAscii.cc
===================================================================
--- cs/spatialdata/trunk/libsrc/spatialdb/SimpleIOAscii.cc	2011-09-16 00:02:40 UTC (rev 18916)
+++ cs/spatialdata/trunk/libsrc/spatialdb/SimpleIOAscii.cc	2011-09-16 02:03:30 UTC (rev 18917)
@@ -37,6 +37,7 @@
 #include <string.h> // USES strlen()
 #include <assert.h> // USES assert()
 
+#include <iostream>
 // ----------------------------------------------------------------------
 const char* spatialdata::spatialdb::SimpleIOAscii::HEADER =
   "#SPATIAL.ascii";
@@ -250,6 +251,9 @@
     double* data = pData->data(iLoc);
     for (int iVal=0; iVal < numValues; ++iVal)
       buffer >> data[iVal];
+    if (buffer.bad()) {
+      throw std::runtime_error("Error reading points.");
+    } // if
   } // for
   if (!filein.good())
     throw std::runtime_error("I/O error while reading SimpleDB data.");

Modified: cs/spatialdata/trunk/libsrc/spatialdb/SpatialDB.cc
===================================================================
--- cs/spatialdata/trunk/libsrc/spatialdb/SpatialDB.cc	2011-09-16 00:02:40 UTC (rev 18916)
+++ cs/spatialdata/trunk/libsrc/spatialdb/SpatialDB.cc	2011-09-16 02:03:30 UTC (rev 18917)
@@ -41,6 +41,30 @@
 } // destructor
 
 // ----------------------------------------------------------------------
+// Query the database.
+int
+spatialdata::spatialdb::SpatialDB::query(float* vals,
+					 const int numVals,
+					 const float* coords,
+					 const int numDims,
+					 const spatialdata::geocoords::CoordSys* csQuery)
+{ // query
+  double* coordsD = (numDims > 0) ? new double[numDims] : 0;
+  for (int i=0; i < numDims; ++i)
+    coordsD[i] = coords[i];
+
+  double* valsD = (numVals > 0) ? new double[numVals] : 0;
+
+  query(valsD, numVals, coordsD, numDims, csQuery);
+
+  for (int i=0; i < numVals; ++i)
+    vals[i] = valsD[i];
+
+  delete[] valsD; valsD = 0;
+  delete[] coordsD; coordsD = 0;
+} // query
+
+// ----------------------------------------------------------------------
 // Perform multiple queries of the database.
 void
 spatialdata::spatialdb::SpatialDB::multiquery(double* vals,
@@ -70,4 +94,34 @@
 } // multiquery
 
 
+// ----------------------------------------------------------------------
+// Perform multiple queries of the database.
+void
+spatialdata::spatialdb::SpatialDB::multiquery(float* vals,
+					      const int numLocsV,
+					      const int numValsV,
+					      int* err,
+					      const int numLocsE,
+					      const float* coords,
+					      const int numLocsC,
+					      const int numDimsC,
+					      const spatialdata::geocoords::CoordSys* csQuery)
+{ // multiquery
+  assert(numLocsV == numLocsE);
+  assert(numLocsC == numLocsE);
+  assert( (0 == vals && 0 == numLocsV && 0 == numValsV) ||
+	  (0 != vals && numLocsV > 0 && numValsV > 0) );
+  assert( (0 == err && 0 == numLocsE) ||
+	  (0 != err && numLocsE > 0) );
+  assert( (0 == coords && 0 == numLocsC && 0 == numDimsC) ||
+	  (0 != coords && numLocsC > 0 && numDimsC > 0) );
+
+  for (int i=0, indexV=0, indexC=0;
+       i < numLocsV;
+       ++i, indexV+=numValsV, indexC+=numDimsC)
+    err[i] = query(&vals[indexV], numValsV, &coords[indexC], numDimsC,
+		   csQuery);
+} // multiquery
+
+
 // End of file 

Modified: cs/spatialdata/trunk/libsrc/spatialdb/SpatialDB.hh
===================================================================
--- cs/spatialdata/trunk/libsrc/spatialdb/SpatialDB.hh	2011-09-16 00:02:40 UTC (rev 18916)
+++ cs/spatialdata/trunk/libsrc/spatialdb/SpatialDB.hh	2011-09-16 02:03:30 UTC (rev 18917)
@@ -100,6 +100,27 @@
 	    const int numDims,
 	    const spatialdata::geocoords::CoordSys* csQuery) = 0;
 
+  /** Query the database.
+   *
+   * @note vals should be preallocated to accommodate numVals values.
+   *
+   * @pre Must call open() before query().
+   *
+   * @param vals Array for computed values (output from query), must be
+   *   allocated BEFORE calling query().
+   * @param numVals Number of values expected (size of pVals array)
+   * @param coords Coordinates of point for query [numDims].
+   * @param numDims Number of dimensions for coordinates.
+   * @param csQuery Coordinate system of coordinates.
+   *
+   * @returns 0 on success, 1 on failure (i.e., could not interpolate)
+   */
+  int query(float* vals,
+	    const int numVals,
+	    const float* coords,
+	    const int numDims,
+	    const spatialdata::geocoords::CoordSys* csQuery);
+
   /** Perform multiple queries of the database.
    *
    * @note vals should be preallocated to accommodate numVals values
@@ -131,6 +152,37 @@
 		  const int numDimsC,
 		  const spatialdata::geocoords::CoordSys* csQuery);
 
+  /** Perform multiple queries of the database.
+   *
+   * @note vals should be preallocated to accommodate numVals values
+   * at numLocs locations.
+   *
+   * @note err should be preallocated to accommodate numLocs values.
+   *
+   * @pre Must call open() before query().
+   *
+   * @param vals Array for computed values (output from query), must be
+   *   allocated BEFORE calling query() [numLocs*numVals].
+   * @param numLocsV Number of locations.
+   * @param numValsV Number of values expected.
+   * @param err Array for error flag values (output from query), must be
+   *   allocated BEFORE calling query() [numLocs].
+   * @param numLocsE Number of locations.
+   * @param coords Coordinates of point for query [numLocs*numDims].
+   * @param numLocsC Number of locations.
+   * @param numDimsC Number of dimensions for coordinates.
+   * @param csQuery Coordinate system of coordinates.
+   */
+  void multiquery(float* vals,
+		  const int numLocsV,
+		  const int numValsV,
+		  int* err,
+		  const int numLocsE,
+		  const float* coords,
+		  const int numLocsC,
+		  const int numDimsC,
+		  const spatialdata::geocoords::CoordSys* csQuery);
+
  private :
   // PRIVATE METHODS ////////////////////////////////////////////////////
   

Modified: cs/spatialdata/trunk/libsrc/units/Nondimensional.hh
===================================================================
--- cs/spatialdata/trunk/libsrc/units/Nondimensional.hh	2011-09-16 00:02:40 UTC (rev 18916)
+++ cs/spatialdata/trunk/libsrc/units/Nondimensional.hh	2011-09-16 02:03:30 UTC (rev 18917)
@@ -129,6 +129,16 @@
 			 const int nvalues,
 			 const double scale) const;
 
+  /** Make values dimensionless.
+   *
+   * @param values Array of values with dimensions in SI units.
+   * @param nvalues Number of values.
+   * @param scale Scale used to nondimensionalize value.
+   */
+  void nondimensionalize(float* const values,
+			 const int nvalues,
+			 const double scale) const;
+
   /** Make value dimensionless.
    *
    * @param values Array of dimensionless values.
@@ -139,6 +149,16 @@
 		      const int nvalues,
 		      const double scale) const;
 
+  /** Make value dimensionless.
+   *
+   * @param values Array of dimensionless values.
+   * @param nvalues Number of values.
+   * @param scale Scale used to nondimensionalize value.
+   */
+  void dimensionalize(float* const values,
+		      const int nvalues,
+		      const double scale) const;
+
 private :
   // PRIVATE MEMBERS ////////////////////////////////////////////////////
 

Modified: cs/spatialdata/trunk/libsrc/units/Nondimensional.icc
===================================================================
--- cs/spatialdata/trunk/libsrc/units/Nondimensional.icc	2011-09-16 00:02:40 UTC (rev 18916)
+++ cs/spatialdata/trunk/libsrc/units/Nondimensional.icc	2011-09-16 02:03:30 UTC (rev 18917)
@@ -70,6 +70,20 @@
     values[i] /= scale;
 } // nondimensionalize
 
+// Make values dimensionless.
+inline
+void
+spatialdata::units::Nondimensional::nondimensionalize(float* const values,
+						      const int nvalues,
+						      const double scale) const
+{ // nondimensionalize
+  assert( (0 < nvalues && 0 != values) ||
+	  (0 == nvalues && 0 == values) );
+
+  for (int i=0; i < nvalues; ++i)
+    values[i] /= scale;
+} // nondimensionalize
+
 // Make value dimensionless.
 inline
 double
@@ -93,4 +107,19 @@
 } // dimensionalize
 
 
+// Make value dimensionless.
+inline
+void
+spatialdata::units::Nondimensional::dimensionalize(float* const values,
+						   const int nvalues,
+						   const double scale) const
+{ // dimensionalize
+  assert( (0 < nvalues && 0 != values) ||
+	  (0 == nvalues && 0 == values) );
+
+  for (int i=0; i < nvalues; ++i)
+    values[i] *= scale;
+} // dimensionalize
+
+
 // End of file 



More information about the CIG-COMMITS mailing list