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

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

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

trunk/esys2/escript/src/Data/DataTagged.cpp revision 123 by jgs, Fri Jul 8 04:08:13 2005 UTC trunk/escript/src/DataTagged.cpp revision 496 by jgs, Tue Feb 7 01:27:14 2006 UTC
# Line 14  Line 14 
14   ******************************************************************************   ******************************************************************************
15  */  */
16    
17  #include "escript/Data/DataTagged.h"  #include "DataTagged.h"
 #include "escript/Data/DataConstant.h"  
 #include "escript/Data/DataExpanded.h"  
 #include "escript/Data/DataException.h"  
18    
19  #include <sstream>  #include "DataConstant.h"
20    #include "DataException.h"
21    
22  using namespace std;  using namespace std;
23    
# Line 29  DataTagged::DataTagged() Line 27  DataTagged::DataTagged()
27    : DataAbstract(FunctionSpace())    : DataAbstract(FunctionSpace())
28  {  {
29    // create a scalar default value    // create a scalar default value
30    m_data.resize(1);    m_data.resize(1,0.,1);
31    DataArrayView temp(m_data,DataArrayView::ShapeType());    DataArrayView temp(m_data,DataArrayView::ShapeType());
32    setPointDataView(temp);    setPointDataView(temp);
33  }  }
# Line 42  DataTagged::DataTagged(const TagListType Line 40  DataTagged::DataTagged(const TagListType
40  {  {
41    // initialise the array of data values    // initialise the array of data values
42    // the default value is always the first item in the values list    // the default value is always the first item in the values list
43    m_data.resize(defaultValue.noValues());    int len = defaultValue.noValues();
44      m_data.resize(len,0.,len);
45    for (int i=0; i<defaultValue.noValues(); i++) {    for (int i=0; i<defaultValue.noValues(); i++) {
46      m_data[i]=defaultValue.getData(i);      m_data[i]=defaultValue.getData(i);
47    }    }
# Line 89  DataTagged::DataTagged(const DataConstan Line 88  DataTagged::DataTagged(const DataConstan
88  {  {
89    // fill the default value with the constant value item from "other"    // fill the default value with the constant value item from "other"
90    const DataArrayView& value=other.getPointDataView();    const DataArrayView& value=other.getPointDataView();
91    m_data.resize(value.noValues());    int len = value.noValues();
92      m_data.resize(len,0.,len);
93    for (int i=0; i<value.noValues(); i++) {    for (int i=0; i<value.noValues(); i++) {
94      m_data[i]=value.getData(i);      m_data[i]=value.getData(i);
95    }    }
# Line 108  DataTagged::DataTagged(const DataTagged& Line 108  DataTagged::DataTagged(const DataTagged&
108    DataArrayView::RegionLoopRangeType region_loop_range=getSliceRegionLoopRange(region);    DataArrayView::RegionLoopRangeType region_loop_range=getSliceRegionLoopRange(region);
109    
110    // allocate enough space for all values    // allocate enough space for all values
111    m_data.resize(DataArrayView::noValues(shape)*(other.m_offsetLookup.size()+1));    int len = DataArrayView::noValues(shape)*(other.m_offsetLookup.size()+1);
112      m_data.resize(len,0.,len);
113    
114    // create the data view    // create the data view
115    DataArrayView temp(m_data,shape);    DataArrayView temp(m_data,shape);
# Line 191  DataTagged::setSlice(const DataAbstract* Line 192  DataTagged::setSlice(const DataAbstract*
192    }    }
193  }  }
194    
195    int
196    DataTagged::getTagNumber(int dpno)
197    {
198      //
199      // Get the number of samples and data-points per sample
200      int numSamples = getNumSamples();
201      int numDataPointsPerSample = getNumDPPSample();
202      int numDataPoints = numSamples * numDataPointsPerSample;
203    
204      if (numDataPointsPerSample==0) {
205        throw DataException("DataTagged::getTagNumber error: no data-points associated with this object.");
206      }
207    
208      if (dpno<0 || dpno>numDataPoints-1) {
209        throw DataException("DataTagged::getTagNumber error: invalid data-point number supplied.");
210      }
211    
212      //
213      // Determine the sample number which corresponds to this data-point number
214      int sampleNo = dpno / numDataPointsPerSample;
215    
216      //
217      // Determine the tag number which corresponds to this sample number
218      int tagNo = getFunctionSpace().getTagFromSampleNo(sampleNo);
219    
220      //
221      // return the tag number
222      return(tagNo);
223    }
224    
225  void  void
226  DataTagged::setTaggedValue(int tagKey,  DataTagged::setTaggedValue(int tagKey,
227                             const DataArrayView& value)                             const DataArrayView& value)
# Line 233  DataTagged::addTaggedValue(int tagKey, Line 264  DataTagged::addTaggedValue(int tagKey,
264      ValueType m_data_temp(m_data);      ValueType m_data_temp(m_data);
265      int oldSize=m_data.size();      int oldSize=m_data.size();
266      int newSize=m_data.size()+value.noValues();      int newSize=m_data.size()+value.noValues();
267      m_data.resize(newSize);      m_data.resize(newSize,0.,newSize);
268      for (int i=0;i<oldSize;i++) {      for (int i=0;i<oldSize;i++) {
269        m_data[i]=m_data_temp[i];        m_data[i]=m_data_temp[i];
270      }      }
# Line 311  DataTagged::toString() const Line 342  DataTagged::toString() const
342    return temp.str();    return temp.str();
343  }  }
344    
345  DataArrayView  DataArrayView::ValueType::size_type
346  DataTagged::getDataPointByTag(int tag) const  DataTagged::getPointOffset(int sampleNo,
347                               int dataPointNo) const
348  {  {
349    DataMapType::const_iterator pos(m_offsetLookup.find(tag));    int tagKey=getFunctionSpace().getTagFromSampleNo(sampleNo);
350      DataMapType::const_iterator pos(m_offsetLookup.find(tagKey));
351    DataArrayView::ValueType::size_type offset=m_defaultValueOffset;    DataArrayView::ValueType::size_type offset=m_defaultValueOffset;
352    if (pos!=m_offsetLookup.end()) {    if (pos!=m_offsetLookup.end()) {
353      offset=pos->second;      offset=pos->second;
354    }    }
355    DataArrayView temp(getPointDataView());    return offset;
   temp.setOffset(offset);  
   return temp;  
356  }  }
357    
358  DataArrayView::ValueType::size_type  DataArrayView
359  DataTagged::getPointOffset(int sampleNo,  DataTagged::getDataPointByTag(int tag) const
                            int dataPointNo) const  
360  {  {
361    int tagKey=getFunctionSpace().getTagFromSampleNo(sampleNo);    DataMapType::const_iterator pos(m_offsetLookup.find(tag));
   DataMapType::const_iterator pos(m_offsetLookup.find(tagKey));  
362    DataArrayView::ValueType::size_type offset=m_defaultValueOffset;    DataArrayView::ValueType::size_type offset=m_defaultValueOffset;
363    if (pos!=m_offsetLookup.end()) {    if (pos!=m_offsetLookup.end()) {
364      offset=pos->second;      offset=pos->second;
365    }    }
366    return offset;    DataArrayView temp(getPointDataView());
367      temp.setOffset(offset);
368      return temp;
369  }  }
370    
371  DataArrayView  DataArrayView
# Line 346  DataTagged::getDataPoint(int sampleNo, Line 377  DataTagged::getDataPoint(int sampleNo,
377    return getDataPointByTag(tagKey);    return getDataPointByTag(tagKey);
378  }  }
379    
 const DataTagged::DataMapType&  
 DataTagged::getTagLookup() const  
 {  
   return m_offsetLookup;  
 }  
   
 DataArrayView::ValueType::size_type  
 DataTagged::getLength() const  
 {  
   return m_data.size();  
 }  
   
380  int  int
381  DataTagged::archiveData(ofstream& archiveFile,  DataTagged::archiveData(ofstream& archiveFile,
382                          const DataArrayView::ValueType::size_type noValues) const                          const DataArrayView::ValueType::size_type noValues) const

Legend:
Removed from v.123  
changed lines
  Added in v.496

  ViewVC Help
Powered by ViewVC 1.1.26