/[escript]/branches/arrexp_2137_win_merge/escript/src/DataVector.cpp
ViewVC logotype

Diff of /branches/arrexp_2137_win_merge/escript/src/DataVector.cpp

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

trunk/escript/src/DataVector.cpp revision 1250 by ksteube, Thu Aug 16 02:54:42 2007 UTC branches/arrexp_trunk2098/escript/src/DataVector.cpp revision 2111 by jfenwick, Mon Dec 1 01:16:18 2008 UTC
# Line 1  Line 1 
1  /*  
2   ************************************************************  /*******************************************************
3   *          Copyright 2006 by ACcESS MNRF                   *  *
4   *                                                          *  * Copyright (c) 2003-2008 by University of Queensland
5   *              http://www.access.edu.au                    *  * Earth Systems Science Computational Center (ESSCC)
6   *       Primary Business: Queensland, Australia            *  * http://www.uq.edu.au/esscc
7   *  Licensed under the Open Software License version 3.0    *  *
8   *     http://www.opensource.org/licenses/osl-3.0.php       *  * Primary Business: Queensland, Australia
9   *                                                          *  * Licensed under the Open Software License version 3.0
10   ************************************************************  * http://www.opensource.org/licenses/osl-3.0.php
11  */  *
12    *******************************************************/
13    
14    
15  #include "DataVector.h"  #include "DataVector.h"
16    
17  #include "Taipan.h"  #include "Taipan.h"
18  #include "DataException.h"  #include "DataException.h"
19    #include <boost/python/extract.hpp>
20    #include "DataTypes.h"
21    
22  #include <cassert>  #include <cassert>
23    
24  using namespace std;  using namespace std;
25  using namespace escript;  using namespace escript;
26    using namespace boost::python;
27    
28  namespace escript {  namespace escript {
29    
# Line 31  void releaseUnusedMemory() Line 36  void releaseUnusedMemory()
36    
37    
38  DataVector::DataVector() :  DataVector::DataVector() :
   m_array_data(0),  
39    m_size(0),    m_size(0),
40    m_dim(0),    m_dim(0),
41    m_N(0)    m_N(0),
42      m_array_data(0)
43  {  {
44  }  }
45    
46  DataVector::DataVector(const DataVector& other) :  DataVector::DataVector(const DataVector& other) :
   m_array_data(0),  
47    m_size(other.m_size),    m_size(other.m_size),
48    m_dim(other.m_dim),    m_dim(other.m_dim),
49    m_N(other.m_N)    m_N(other.m_N),
50      m_array_data(0)
51  {  {
52    m_array_data = arrayManager.new_array(m_dim,m_N);    m_array_data = arrayManager.new_array(m_dim,m_N);
53    int i;    int i;
# Line 55  DataVector::DataVector(const DataVector& Line 60  DataVector::DataVector(const DataVector&
60  DataVector::DataVector(const DataVector::size_type size,  DataVector::DataVector(const DataVector::size_type size,
61                         const DataVector::value_type val,                         const DataVector::value_type val,
62                         const DataVector::size_type blockSize) :                         const DataVector::size_type blockSize) :
   m_array_data(0),  
63    m_size(size),    m_size(size),
64    m_dim(blockSize)    m_dim(blockSize),
65      m_array_data(0)
66  {  {
67    resize(size, val, blockSize);    resize(size, val, blockSize);
68  }  }
# Line 158  DataVector::operator!=(const DataVector& Line 163  DataVector::operator!=(const DataVector&
163    return !(*this==other);    return !(*this==other);
164  }  }
165    
 int  
 DataVector::archiveData(ofstream& archiveFile,  
                         const size_type noValues) const  
 {  
   //  
   // Check number of values expected to be written matches number in this object  
   if (noValues != size()) {  
     return 2;  
   }  
   
   //  
   // Write all values in this object out to archiveFile  
   for (int i=0; i<size(); i++) {  
     archiveFile.write(reinterpret_cast<char *>(&m_array_data[i]),sizeof(double));  
   }  
   
   //  
   // Check no errors were encountered before returning  
   if (!archiveFile.good()) {  
     return 1;  
   }  
   
   return 0;  
 }  
166    
167  int  void
168  DataVector::extractData(ifstream& archiveFile,  DataVector::copyFromNumArray(const boost::python::numeric::array& value)
                         const size_type noValues)  
169  {  {
170    //    using DataTypes::ValueType;
171    // Check number of values expected to be read matches number in this object    if (m_array_data!=0) {
172    if (noValues != size()) {      arrayManager.delete_array(m_array_data);
     return 2;  
173    }    }
174    
   //  
   // Read all values in archiveFile back to this object  
   for (int i=0; i<size(); i++) {  
     archiveFile.read(reinterpret_cast<char *>(&m_array_data[i]),sizeof(double));  
   }  
175    
176    //    m_array_data = arrayManager.new_array(1,value.nelements());
   // Check no errors were encountered before returning  
   if (!archiveFile.good()) {  
     return 1;  
   }  
177    
178    return 0;    int si=0,sj=0,sk=0,sl=0;      // bounds for each dimension of the shape
179      DataTypes::ShapeType tempShape;    
180      for (int i=0; i<value.getrank(); i++) {
181         tempShape.push_back(extract<int>(value.getshape()[i]));
182      }
183    
184      if (value.getrank()==0) {
185         m_array_data[0]=extract<double>(value[value.getshape()]);
186      } else if (value.getrank()==1) {
187         si=tempShape[0];
188         for (ValueType::size_type i=0;i<si;i++) {
189            m_array_data[i]=extract<double>(value[i]);
190         }
191      } else if (value.getrank()==2) {
192        si=tempShape[0];
193        sj=tempShape[1];
194            for (ValueType::size_type i=0;i<si;i++) {
195               for (ValueType::size_type j=0;j<sj;j++) {
196                  m_array_data[DataTypes::getRelIndex(tempShape,i,j)]=extract<double>(value[i][j]);
197               }
198            }
199      } else if (value.getrank()==3) {
200        si=tempShape[0];
201        sj=tempShape[1];
202        sk=tempShape[2];
203            for (ValueType::size_type i=0;i<si;i++) {
204               for (ValueType::size_type j=0;j<sj;j++) {
205                  for (ValueType::size_type k=0;k<sk;k++) {
206                     m_array_data[DataTypes::getRelIndex(tempShape,i,j,k)]=extract<double>(value[i][j][k]);
207                  }
208               }
209            }
210      } else if (value.getrank()==4) {
211        si=tempShape[0];
212        sj=tempShape[1];
213        sk=tempShape[2];
214        sl=tempShape[3];
215            for (ValueType::size_type i=0;i<si;i++) {
216               for (ValueType::size_type j=0;j<sj;j++) {
217                  for (ValueType::size_type k=0;k<sk;k++) {
218                     for (ValueType::size_type l=0;l<sl;l++) {
219                        m_array_data[DataTypes::getRelIndex(tempShape,i,j,k,l)]=extract<double>(value[i][j][k][l]);
220                     }
221                  }
222               }
223            }
224       }
225       m_size=value.nelements();    // total amount of elements
226       m_dim=m_size;        // elements per sample
227       m_N=1;           // number of samples
228  }  }
229    
230    
231    
232  } // end of namespace  } // end of namespace

Legend:
Removed from v.1250  
changed lines
  Added in v.2111

  ViewVC Help
Powered by ViewVC 1.1.26