/[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/escript/src/Data/DataTagged.cpp revision 155 by jgs, Wed Nov 9 02:02:19 2005 UTC trunk/escript/src/DataTagged.cpp revision 509 by jgs, Fri Feb 10 03:24:44 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 28  namespace escript { Line 26  namespace escript {
26  DataTagged::DataTagged()  DataTagged::DataTagged()
27    : DataAbstract(FunctionSpace())    : DataAbstract(FunctionSpace())
28  {  {
29      // default constructor
30    
31    // create a scalar default value    // create a scalar default value
32    m_data.resize(1,0.,1);    m_data.resize(1,0.,1);
33    DataArrayView temp(m_data,DataArrayView::ShapeType());    DataArrayView temp(m_data,DataArrayView::ShapeType());
# Line 40  DataTagged::DataTagged(const TagListType Line 40  DataTagged::DataTagged(const TagListType
40                 const FunctionSpace& what)                 const FunctionSpace& what)
41    : DataAbstract(what)    : DataAbstract(what)
42  {  {
43      // constructor
44    
45    // initialise the array of data values    // initialise the array of data values
46    // the default value is always the first item in the values list    // the default value is always the first item in the values list
47    int len = defaultValue.noValues();    int len = defaultValue.noValues();
# Line 59  DataTagged::DataTagged(const TagListType Line 61  DataTagged::DataTagged(const TagListType
61  DataTagged::DataTagged(const FunctionSpace& what,  DataTagged::DataTagged(const FunctionSpace& what,
62                         const DataArrayView::ShapeType &shape,                         const DataArrayView::ShapeType &shape,
63                         const int tags[],                         const int tags[],
64                         const ValueType &data)                         const ValueType& data)
65    : DataAbstract(what)    : DataAbstract(what)
66  {  {
67      // alternative constructor
68      // not unit_tested tested yet
69    
70    // copy the data    // copy the data
71    m_data=data;    m_data=data;
72    
# Line 80  DataTagged::DataTagged(const DataTagged& Line 85  DataTagged::DataTagged(const DataTagged&
85    m_data(other.m_data),    m_data(other.m_data),
86    m_offsetLookup(other.m_offsetLookup)    m_offsetLookup(other.m_offsetLookup)
87  {  {
88      // copy constructor
89    
90    // create the data view    // create the data view
91    DataArrayView temp(m_data,other.getPointDataView().getShape());    DataArrayView temp(m_data,other.getPointDataView().getShape());
92    setPointDataView(temp);    setPointDataView(temp);
# Line 88  DataTagged::DataTagged(const DataTagged& Line 95  DataTagged::DataTagged(const DataTagged&
95  DataTagged::DataTagged(const DataConstant& other)  DataTagged::DataTagged(const DataConstant& other)
96    : DataAbstract(other.getFunctionSpace())    : DataAbstract(other.getFunctionSpace())
97  {  {
98      // copy constructor
99    
100    // fill the default value with the constant value item from "other"    // fill the default value with the constant value item from "other"
101    const DataArrayView& value=other.getPointDataView();    const DataArrayView& value=other.getPointDataView();
102    int len = value.noValues();    int len = value.noValues();
# Line 105  DataTagged::DataTagged(const DataTagged& Line 114  DataTagged::DataTagged(const DataTagged&
114                 const DataArrayView::RegionType& region)                 const DataArrayView::RegionType& region)
115    : DataAbstract(other.getFunctionSpace())    : DataAbstract(other.getFunctionSpace())
116  {  {
117      // slice constructor
118    
119    // get the shape of the slice to copy from other    // get the shape of the slice to copy from other
120    DataArrayView::ShapeType shape(DataArrayView::getResultSliceShape(region));    DataArrayView::ShapeType shape(DataArrayView::getResultSliceShape(region));
121    DataArrayView::RegionLoopRangeType region_loop_range=getSliceRegionLoopRange(region);    DataArrayView::RegionLoopRangeType region_loop_range=getSliceRegionLoopRange(region);
# Line 207  DataTagged::getTagNumber(int dpno) Line 218  DataTagged::getTagNumber(int dpno)
218      throw DataException("DataTagged::getTagNumber error: no data-points associated with this object.");      throw DataException("DataTagged::getTagNumber error: no data-points associated with this object.");
219    }    }
220    
221    if (dpno<0 || dpno>numDataPoints) {    if (dpno<0 || dpno>numDataPoints-1) {
222      throw DataException("DataTagged::getTagNumber error: invalid data-point number supplied.");      throw DataException("DataTagged::getTagNumber error: invalid data-point number supplied.");
223    }    }
224    
# Line 225  DataTagged::getTagNumber(int dpno) Line 236  DataTagged::getTagNumber(int dpno)
236  }  }
237    
238  void  void
239    DataTagged::setTaggedValues(const TagListType& tagKeys,
240                                const ValueListType& values)
241    {
242      addTaggedValues(tagKeys,values);
243    }
244    
245    void
246  DataTagged::setTaggedValue(int tagKey,  DataTagged::setTaggedValue(int tagKey,
247                             const DataArrayView& value)                             const DataArrayView& value)
248  {  {
# Line 246  DataTagged::setTaggedValue(int tagKey, Line 264  DataTagged::setTaggedValue(int tagKey,
264  }  }
265    
266  void  void
267    DataTagged::addTaggedValues(const TagListType& tagKeys,
268                                const ValueListType& values)
269    {
270      if (values.size()==0) {
271        // copy the current default value for each of the tags
272        TagListType::const_iterator iT;
273        for (iT=tagKeys.begin();iT!=tagKeys.end();iT++) {
274          // the point data view for DataTagged points at the default value
275          addTaggedValue(*iT,getPointDataView());
276        }
277      } else if (values.size()==1 && tagKeys.size()>1) {
278        // assume the one given value will be used for all tag values
279        TagListType::const_iterator iT;
280        for (iT=tagKeys.begin();iT!=tagKeys.end();iT++) {
281          addTaggedValue(*iT,values[0]);
282        }
283      } else {
284        if (tagKeys.size()!=values.size()) {
285          stringstream temp;
286          temp << "Error - (addTaggedValue) Number of tags: " << tagKeys.size()
287           << " doesn't match number of values: " << values.size();
288          throw DataException(temp.str());
289        } else {
290          for (int i=0;i<tagKeys.size();i++) {
291            addTaggedValue(tagKeys[i],values[i]);
292          }
293        }
294      }
295    }
296    
297    void
298  DataTagged::addTaggedValue(int tagKey,  DataTagged::addTaggedValue(int tagKey,
299                             const DataArrayView& value)                             const DataArrayView& value)
300  {  {
# Line 276  DataTagged::addTaggedValue(int tagKey, Line 325  DataTagged::addTaggedValue(int tagKey,
325    }    }
326  }  }
327    
 void  
 DataTagged::setTaggedValues(const TagListType& tagKeys,  
                             const ValueListType& values)  
 {  
   addTaggedValues(tagKeys,values);  
 }  
   
 void  
 DataTagged::addTaggedValues(const TagListType& tagKeys,  
                             const ValueListType& values)  
 {  
   if (values.size()==0) {  
     // copy the default value for each of the tags  
     TagListType::const_iterator iT;  
     for (iT=tagKeys.begin();iT!=tagKeys.end();iT++) {  
       // the point data view for DataTagged points at the default value  
       addTaggedValue(*iT,getPointDataView());  
     }  
   } else if (values.size()==1 && tagKeys.size()>1) {  
     // assume the one value will be used for all tag values  
     TagListType::const_iterator iT;  
     for (iT=tagKeys.begin();iT!=tagKeys.end();iT++) {  
       addTaggedValue(*iT,values[0]);  
     }  
   } else {  
     if (tagKeys.size()!=values.size()) {  
       stringstream temp;  
       temp << "Error - (addTaggedValue) Number of tags: " << tagKeys.size()  
        << " doesn't match the number of values: " << values.size();  
       throw DataException(temp.str());  
     } else {  
       for (int i=0;i<tagKeys.size();i++) {  
         addTaggedValue(tagKeys[i],values[i]);  
       }  
     }  
   }  
 }  
   
328  double*  double*
329  DataTagged::getSampleDataByTag(int tag)  DataTagged::getSampleDataByTag(int tag)
330  {  {
# Line 344  DataTagged::toString() const Line 355  DataTagged::toString() const
355    return temp.str();    return temp.str();
356  }  }
357    
358  DataArrayView  DataArrayView::ValueType::size_type
359  DataTagged::getDataPointByTag(int tag) const  DataTagged::getPointOffset(int sampleNo,
360                               int dataPointNo) const
361  {  {
362    DataMapType::const_iterator pos(m_offsetLookup.find(tag));    int tagKey=getFunctionSpace().getTagFromSampleNo(sampleNo);
363      DataMapType::const_iterator pos(m_offsetLookup.find(tagKey));
364    DataArrayView::ValueType::size_type offset=m_defaultValueOffset;    DataArrayView::ValueType::size_type offset=m_defaultValueOffset;
365    if (pos!=m_offsetLookup.end()) {    if (pos!=m_offsetLookup.end()) {
366      offset=pos->second;      offset=pos->second;
367    }    }
368    DataArrayView temp(getPointDataView());    return offset;
   temp.setOffset(offset);  
   return temp;  
369  }  }
370    
371  DataArrayView::ValueType::size_type  DataArrayView
372  DataTagged::getPointOffset(int sampleNo,  DataTagged::getDataPointByTag(int tag) const
                            int dataPointNo) const  
373  {  {
374    int tagKey=getFunctionSpace().getTagFromSampleNo(sampleNo);    DataMapType::const_iterator pos(m_offsetLookup.find(tag));
   DataMapType::const_iterator pos(m_offsetLookup.find(tagKey));  
375    DataArrayView::ValueType::size_type offset=m_defaultValueOffset;    DataArrayView::ValueType::size_type offset=m_defaultValueOffset;
376    if (pos!=m_offsetLookup.end()) {    if (pos!=m_offsetLookup.end()) {
377      offset=pos->second;      offset=pos->second;
378    }    }
379    return offset;    DataArrayView temp(getPointDataView());
380      temp.setOffset(offset);
381      return temp;
382  }  }
383    
384  DataArrayView  DataArrayView
# Line 379  DataTagged::getDataPoint(int sampleNo, Line 390  DataTagged::getDataPoint(int sampleNo,
390    return getDataPointByTag(tagKey);    return getDataPointByTag(tagKey);
391  }  }
392    
 const DataTagged::DataMapType&  
 DataTagged::getTagLookup() const  
 {  
   return m_offsetLookup;  
 }  
   
 DataArrayView::ValueType::size_type  
 DataTagged::getLength() const  
 {  
   return m_data.size();  
 }  
   
393  int  int
394  DataTagged::archiveData(ofstream& archiveFile,  DataTagged::archiveData(ofstream& archiveFile,
395                          const DataArrayView::ValueType::size_type noValues) const                          const DataArrayView::ValueType::size_type noValues) const

Legend:
Removed from v.155  
changed lines
  Added in v.509

  ViewVC Help
Powered by ViewVC 1.1.26