/[escript]/trunk/escript/src/Data.cpp
ViewVC logotype

Diff of /trunk/escript/src/Data.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 922 by gross, Fri Jan 5 04:23:05 2007 UTC revision 1032 by phornby, Wed Mar 14 06:32:09 2007 UTC
# Line 726  Data:: getValueOfDataPoint(int dataPoint Line 726  Data:: getValueOfDataPoint(int dataPoint
726         int dataPointNoInSample = dataPointNo - sampleNo * getNumDataPointsPerSample();         int dataPointNoInSample = dataPointNo - sampleNo * getNumDataPointsPerSample();
727         //         //
728         // Check a valid sample number has been supplied         // Check a valid sample number has been supplied
729         if (sampleNo >= getNumSamples() or sampleNo < 0 ) {         if ((sampleNo >= getNumSamples()) || (sampleNo < 0 )) {
730             throw DataException("Error - Data::convertToNumArray: invalid sampleNo.");             throw DataException("Error - Data::convertToNumArray: invalid sampleNo.");
731         }         }
732                                
733         //         //
734         // Check a valid data point number has been supplied         // Check a valid data point number has been supplied
735         if (dataPointNoInSample >= getNumDataPointsPerSample() or dataPointNoInSample < 0) {         if ((dataPointNoInSample >= getNumDataPointsPerSample()) || (dataPointNoInSample < 0)) {
736             throw DataException("Error - Data::convertToNumArray: invalid dataPointNoInSample.");             throw DataException("Error - Data::convertToNumArray: invalid dataPointNoInSample.");
737         }         }
738         // TODO: global error handling         // TODO: global error handling
# Line 877  Data::getValueOfGlobalDataPoint(int proc Line 877  Data::getValueOfGlobalDataPoint(int proc
877                  int dataPointNoInSample = dataPointNo - sampleNo * getNumDataPointsPerSample();                  int dataPointNoInSample = dataPointNo - sampleNo * getNumDataPointsPerSample();
878                  //                  //
879                  // Check a valid sample number has been supplied                  // Check a valid sample number has been supplied
880                  if (sampleNo >= getNumSamples() or sampleNo < 0 ) {                  if ((sampleNo >= getNumSamples()) || (sampleNo < 0 )) {
881                    throw DataException("Error - Data::convertToNumArray: invalid sampleNo.");                    throw DataException("Error - Data::convertToNumArray: invalid sampleNo.");
882                  }                  }
883                                
884                  //                  //
885                  // Check a valid data point number has been supplied                  // Check a valid data point number has been supplied
886                  if (dataPointNoInSample >= getNumDataPointsPerSample() or dataPointNoInSample < 0) {                  if ((dataPointNoInSample >= getNumDataPointsPerSample()) || (dataPointNoInSample < 0)) {
887                    throw DataException("Error - Data::convertToNumArray: invalid dataPointNoInSample.");                    throw DataException("Error - Data::convertToNumArray: invalid dataPointNoInSample.");
888                  }                  }
889                  // TODO: global error handling                  // TODO: global error handling
# Line 1035  Data::integrate() const Line 1035  Data::integrate() const
1035  }  }
1036    
1037  Data  Data
 Data::erf() const  
 {  
 #if defined DOPROF  
   profData->unary++;  
 #endif  
   return escript::unaryOp(*this,(Data::UnaryDFunPtr)::erf);  
 }  
   
 Data  
1038  Data::sin() const  Data::sin() const
1039  {  {
1040  #if defined DOPROF  #if defined DOPROF
# Line 1088  Data::acos() const Line 1079  Data::acos() const
1079    return escript::unaryOp(*this,(Data::UnaryDFunPtr)::acos);    return escript::unaryOp(*this,(Data::UnaryDFunPtr)::acos);
1080  }  }
1081    
1082    
1083  Data  Data
1084  Data::atan() const  Data::atan() const
1085  {  {
# Line 1124  Data::tanh() const Line 1116  Data::tanh() const
1116    return escript::unaryOp(*this,(Data::UnaryDFunPtr)::tanh);    return escript::unaryOp(*this,(Data::UnaryDFunPtr)::tanh);
1117  }  }
1118    
1119    
1120    Data
1121    Data::erf() const
1122    {
1123    #if defined DOPROF
1124      profData->unary++;
1125    #endif
1126    #ifdef _WIN32
1127      throw DataException("Error - Data:: erf function is not supported on _WIN32 platforms.");
1128    #else
1129      return escript::unaryOp(*this,(Data::UnaryDFunPtr)::erf);
1130    #endif
1131    }
1132    
1133  Data  Data
1134  Data::asinh() const  Data::asinh() const
1135  {  {
1136  #if defined DOPROF  #if defined DOPROF
1137    profData->unary++;    profData->unary++;
1138  #endif  #endif
1139    #ifdef _WIN32
1140      return escript::unaryOp(*this,escript::asinh_substitute);
1141    #else
1142    return escript::unaryOp(*this,(Data::UnaryDFunPtr)::asinh);    return escript::unaryOp(*this,(Data::UnaryDFunPtr)::asinh);
1143    #endif
1144  }  }
1145    
1146  Data  Data
# Line 1139  Data::acosh() const Line 1149  Data::acosh() const
1149  #if defined DOPROF  #if defined DOPROF
1150    profData->unary++;    profData->unary++;
1151  #endif  #endif
1152    #ifdef _WIN32
1153      return escript::unaryOp(*this,escript::acosh_substitute);
1154    #else
1155    return escript::unaryOp(*this,(Data::UnaryDFunPtr)::acosh);    return escript::unaryOp(*this,(Data::UnaryDFunPtr)::acosh);
1156    #endif
1157  }  }
1158    
1159  Data  Data
# Line 1148  Data::atanh() const Line 1162  Data::atanh() const
1162  #if defined DOPROF  #if defined DOPROF
1163    profData->unary++;    profData->unary++;
1164  #endif  #endif
1165    #ifdef _WIN32
1166      return escript::unaryOp(*this,escript::atanh_substitute);
1167    #else
1168    return escript::unaryOp(*this,(Data::UnaryDFunPtr)::atanh);    return escript::unaryOp(*this,(Data::UnaryDFunPtr)::atanh);
1169    #endif
1170  }  }
1171    
1172  Data  Data
# Line 2092  Data::getTagNumber(int dpno) Line 2110  Data::getTagNumber(int dpno)
2110    return m_data->getTagNumber(dpno);    return m_data->getTagNumber(dpno);
2111  }  }
2112    
 /* TODO */  
 /* global reduction */  
 void  
 Data::setRefValue(int ref,  
                   const boost::python::numeric::array& value)  
 {  
   if (isProtected()) {  
         throw DataException("Error - attempt to update protected Data object.");  
   }  
   //  
   // Construct DataArray from boost::python::object input value  
   DataArray valueDataArray(value);  
   
   //  
   // Call DataAbstract::setRefValue  
   m_data->setRefValue(ref,valueDataArray);  
 }  
   
 /* TODO */  
 /* global reduction */  
 void  
 Data::getRefValue(int ref,  
                   boost::python::numeric::array& value)  
 {  
   //  
   // Construct DataArray for boost::python::object return value  
   DataArray valueDataArray(value);  
   
   //  
   // Load DataArray with values from data-points specified by ref  
   m_data->getRefValue(ref,valueDataArray);  
   
   //  
   // Load values from valueDataArray into return numarray  
   
   // extract the shape of the numarray  
   int rank = value.getrank();  
   DataArrayView::ShapeType shape;  
   for (int i=0; i < rank; i++) {  
     shape.push_back(extract<int>(value.getshape()[i]));  
   }  
   
   // and load the numarray with the data from the DataArray  
   DataArrayView valueView = valueDataArray.getView();  
   
   if (rank==0) {  
       boost::python::numeric::array temp_numArray(valueView());  
       value = temp_numArray;  
   }  
   if (rank==1) {  
     for (int i=0; i < shape[0]; i++) {  
       value[i] = valueView(i);  
     }  
   }  
   if (rank==2) {  
     for (int i=0; i < shape[0]; i++) {  
       for (int j=0; j < shape[1]; j++) {  
         value[make_tuple(i,j)] = valueView(i,j);  
       }  
     }  
   }  
   if (rank==3) {  
     for (int i=0; i < shape[0]; i++) {  
       for (int j=0; j < shape[1]; j++) {  
         for (int k=0; k < shape[2]; k++) {  
           value[make_tuple(i,j,k)] = valueView(i,j,k);  
         }  
       }  
     }  
   }  
   if (rank==4) {  
     for (int i=0; i < shape[0]; i++) {  
       for (int j=0; j < shape[1]; j++) {  
         for (int k=0; k < shape[2]; k++) {  
           for (int l=0; l < shape[3]; l++) {  
             value[make_tuple(i,j,k,l)] = valueView(i,j,k,l);  
           }  
         }  
       }  
     }  
   }  
   
 }  
   
2113  void  void
2114  Data::archiveData(const std::string fileName)  Data::archiveData(const std::string fileName)
2115  {  {
# Line 2217  Data::archiveData(const std::string file Line 2151  Data::archiveData(const std::string file
2151    DataArrayView::ShapeType dataPointShape = getDataPointShape();    DataArrayView::ShapeType dataPointShape = getDataPointShape();
2152    vector<int> referenceNumbers(noSamples);    vector<int> referenceNumbers(noSamples);
2153    for (int sampleNo=0; sampleNo<noSamples; sampleNo++) {    for (int sampleNo=0; sampleNo<noSamples; sampleNo++) {
2154      referenceNumbers[sampleNo] = getFunctionSpace().getReferenceNoFromSampleNo(sampleNo);      referenceNumbers[sampleNo] = getFunctionSpace().getReferenceIDOfSample(sampleNo);
2155    }    }
2156    vector<int> tagNumbers(noSamples);    vector<int> tagNumbers(noSamples);
2157    if (isTagged()) {    if (isTagged()) {
# Line 2426  Data::extractData(const std::string file Line 2360  Data::extractData(const std::string file
2360      throw DataException("extractData Error: incompatible FunctionSpace");      throw DataException("extractData Error: incompatible FunctionSpace");
2361    }    }
2362    for (int sampleNo=0; sampleNo<noSamples; sampleNo++) {    for (int sampleNo=0; sampleNo<noSamples; sampleNo++) {
2363      if (referenceNumbers[sampleNo] != fspace.getReferenceNoFromSampleNo(sampleNo)) {      if (referenceNumbers[sampleNo] != fspace.getReferenceIDOfSample(sampleNo)) {
2364        throw DataException("extractData Error: incompatible FunctionSpace");        throw DataException("extractData Error: incompatible FunctionSpace");
2365      }      }
2366    }    }

Legend:
Removed from v.922  
changed lines
  Added in v.1032

  ViewVC Help
Powered by ViewVC 1.1.26