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

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

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

trunk/esys2/escript/src/Data/DataConstant.cpp revision 108 by jgs, Thu Jan 27 06:21:59 2005 UTC trunk/escript/src/DataConstant.cpp revision 804 by gross, Thu Aug 10 01:12:16 2006 UTC
# Line 1  Line 1 
1  //$Id$  //$Id$
2  /*  /*
3   ******************************************************************************   ************************************************************
4   *                                                                            *   *          Copyright 2006 by ACcESS MNRF                   *
5   *       COPYRIGHT  ACcESS 2004 -  All Rights Reserved                        *   *                                                          *
6   *                                                                            *   *              http://www.access.edu.au                    *
7   * This software is the property of ACcESS. No part of this code              *   *       Primary Business: Queensland, Australia            *
8   * may be copied in any form or by any means without the expressed written    *   *  Licensed under the Open Software License version 3.0    *
9   * consent of ACcESS.  Copying, use or modification of this software          *   *     http://www.opensource.org/licenses/osl-3.0.php       *
10   * by any unauthorised person is illegal unless that person has a software    *   *                                                          *
11   * license agreement with ACcESS.                                             *   ************************************************************
  *                                                                            *  
  ******************************************************************************  
12  */  */
13    
14  #include "escript/Data/DataConstant.h"  #include "DataConstant.h"
15  #include "escript/Data/DataException.h"  #include "DataException.h"
16  #include "esysUtils/EsysAssert.h"  #include "esysUtils/EsysAssert.h"
17    
18  #include <iostream>  #include <iostream>
# Line 32  DataConstant::DataConstant(const boost:: Line 30  DataConstant::DataConstant(const boost::
30    //    //
31    // copy the data in the correct format    // copy the data in the correct format
32    m_data=temp.getData();    m_data=temp.getData();
   DataArrayView tempView(m_data,temp.getView().getShape());  
33    //    //
34    // copy the view of the data    // create the view of the data
35      DataArrayView tempView(m_data,temp.getView().getShape());
36    setPointDataView(tempView);    setPointDataView(tempView);
37  }  }
38    
# Line 45  DataConstant::DataConstant(const DataArr Line 43  DataConstant::DataConstant(const DataArr
43    //    //
44    // copy the data in the correct format    // copy the data in the correct format
45    m_data=value.getData();    m_data=value.getData();
   DataArrayView tempView(m_data,value.getShape());  
46    //    //
47    // copy the view of the data    // create the view of the data
48      DataArrayView tempView(m_data,value.getShape());
49    setPointDataView(tempView);    setPointDataView(tempView);
50  }  }
51    
# Line 57  DataConstant::DataConstant(const DataCon Line 55  DataConstant::DataConstant(const DataCon
55    //    //
56    // copy the data in the correct format    // copy the data in the correct format
57    m_data=other.m_data;    m_data=other.m_data;
   DataArrayView tempView(m_data,other.getPointDataView().getShape());  
58    //    //
59    // copy the view of the data    // create the view of the data
60      DataArrayView tempView(m_data,other.getPointDataView().getShape());
61    setPointDataView(tempView);    setPointDataView(tempView);
62  }  }
63    
# Line 72  DataConstant::DataConstant(const DataCon Line 70  DataConstant::DataConstant(const DataCon
70    DataArrayView::ShapeType shape(DataArrayView::getResultSliceShape(region));    DataArrayView::ShapeType shape(DataArrayView::getResultSliceShape(region));
71    //    //
72    // allocate space for this new DataConstant's data    // allocate space for this new DataConstant's data
73    m_data.resize(DataArrayView::noValues(shape));    int len = DataArrayView::noValues(shape);
74      m_data.resize(len,0.,len);
75    //    //
76    // create a view of the data with the correct shape    // create a view of the data with the correct shape
77    DataArrayView tempView(m_data,shape);    DataArrayView tempView(m_data,shape);
   // copy the data from the slice to the temp view  
78    DataArrayView::RegionLoopRangeType region_loop_range=getSliceRegionLoopRange(region);    DataArrayView::RegionLoopRangeType region_loop_range=getSliceRegionLoopRange(region);
79      //
80      // load the view with the data from the slice
81    tempView.copySlice(other.getPointDataView(),region_loop_range);    tempView.copySlice(other.getPointDataView(),region_loop_range);
82      setPointDataView(tempView);
83    }
84    
85    DataConstant::DataConstant(const FunctionSpace& what,
86                               const DataArrayView::ShapeType &shape,
87                               const DataArrayView::ValueType &data)
88      : DataAbstract(what)
89    {
90    //    //
91    // store the temp view of the data in this object    // copy the data in the correct format
92      m_data=data;
93      //
94      // create the view of the data
95      DataArrayView tempView(m_data,shape);
96    setPointDataView(tempView);    setPointDataView(tempView);
97  }  }
98    
# Line 96  DataConstant::getPointOffset(int sampleN Line 108  DataConstant::getPointOffset(int sampleN
108  {  {
109    EsysAssert((validSamplePointNo(dataPointNo) && validSampleNo(sampleNo)),    EsysAssert((validSamplePointNo(dataPointNo) && validSampleNo(sampleNo)),
110                "Invalid index, sampleNo: " << sampleNo << " dataPointNo: " << dataPointNo);                "Invalid index, sampleNo: " << sampleNo << " dataPointNo: " << dataPointNo);
111      //
112      // Whatever the coord's always return the same value as this is constant data.
113    return 0;    return 0;
114  }  }
115    
# Line 138  DataConstant::setSlice(const DataAbstrac Line 152  DataConstant::setSlice(const DataAbstrac
152    if (getPointDataView().getRank()!=region.size()) {    if (getPointDataView().getRank()!=region.size()) {
153      throw DataException("Error - Invalid slice region.");      throw DataException("Error - Invalid slice region.");
154    }    }
155    if (tempDataConst->getPointDataView().getRank()>0 and !value->getPointDataView().checkShape(shape)) {    if (tempDataConst->getPointDataView().getRank()>0 && !value->getPointDataView().checkShape(shape)) {
156      throw DataException (value->getPointDataView().createShapeErrorMessage(      throw DataException (value->getPointDataView().createShapeErrorMessage(
157                  "Error - Couldn't copy slice due to shape mismatch.",shape));                  "Error - Couldn't copy slice due to shape mismatch.",shape));
158    }    }
# Line 155  DataConstant::reshapeDataPoint(const Dat Line 169  DataConstant::reshapeDataPoint(const Dat
169           << "This Data has data points with rank: " << getPointDataView().getRank();           << "This Data has data points with rank: " << getPointDataView().getRank();
170      throw DataException(temp.str());      throw DataException(temp.str());
171    }    }
172    m_data.resize(DataArrayView::noValues(shape),getPointDataView()());    int len = DataArrayView::noValues(shape);
173      m_data.resize(len,getPointDataView()(),len);
174    DataArrayView newView(m_data,shape);    DataArrayView newView(m_data,shape);
175    setPointDataView(newView);    setPointDataView(newView);
176  }  }
177    
178    int
179    DataConstant::archiveData(ofstream& archiveFile,
180                              const DataArrayView::ValueType::size_type noValues) const
181    {
182      return(m_data.archiveData(archiveFile, noValues));
183    }
184    
185    int
186    DataConstant::extractData(ifstream& archiveFile,
187                              const DataArrayView::ValueType::size_type noValues)
188    {
189      return(m_data.extractData(archiveFile, noValues));
190    }
191    
192    void
193    DataConstant::symmetric(DataAbstract* ev)
194    {
195      DataConstant* temp_ev=dynamic_cast<DataConstant*>(ev);
196      if (temp_ev==0) {
197        throw DataException("Error - DataConstant::symmetric: casting to DataConstant failed (propably a programming error).");
198      }
199      DataArrayView& thisView=getPointDataView();
200      DataArrayView& evView=ev->getPointDataView();
201      DataArrayView::symmetric(thisView,0,evView,0);
202    }
203    
204    void
205    DataConstant::nonsymmetric(DataAbstract* ev)
206    {
207      DataConstant* temp_ev=dynamic_cast<DataConstant*>(ev);
208      if (temp_ev==0) {
209        throw DataException("Error - DataConstant::nonsymmetric: casting to DataConstant failed (propably a programming error).");
210      }
211      DataArrayView& thisView=getPointDataView();
212      DataArrayView& evView=ev->getPointDataView();
213      DataArrayView::nonsymmetric(thisView,0,evView,0);
214    }
215    
216    void
217    DataConstant::trace(DataAbstract* ev, int axis_offset)
218    {
219      DataConstant* temp_ev=dynamic_cast<DataConstant*>(ev);
220      if (temp_ev==0) {
221        throw DataException("Error - DataConstant::trace: casting to DataConstant failed (propably a programming error).");
222      }
223      DataArrayView& thisView=getPointDataView();
224      DataArrayView& evView=ev->getPointDataView();
225      DataArrayView::trace(thisView,0,evView,0,axis_offset);
226    }
227    
228    void
229    DataConstant::swapaxes(DataAbstract* ev, int axis0, int axis1)
230    {
231      DataConstant* temp_ev=dynamic_cast<DataConstant*>(ev);
232      if (temp_ev==0) {
233        throw DataException("Error - DataConstant::swapaxes: casting to DataConstant failed (propably a programming error).");
234      }
235      DataArrayView& thisView=getPointDataView();
236      DataArrayView& evView=ev->getPointDataView();
237      DataArrayView::swapaxes(thisView,0,evView,0,axis0,axis1);
238    }
239    
240    void
241    DataConstant::transpose(DataAbstract* ev, int axis_offset)
242    {
243      DataConstant* temp_ev=dynamic_cast<DataConstant*>(ev);
244      if (temp_ev==0) {
245        throw DataException("Error - DataConstant::transpose: casting to DataConstant failed (propably a programming error).");
246      }
247      DataArrayView& thisView=getPointDataView();
248      DataArrayView& evView=ev->getPointDataView();
249      DataArrayView::transpose(thisView,0,evView,0,axis_offset);
250    }
251    
252    void
253    DataConstant::eigenvalues(DataAbstract* ev)
254    {
255      DataConstant* temp_ev=dynamic_cast<DataConstant*>(ev);
256      if (temp_ev==0) {
257        throw DataException("Error - DataConstant::eigenvalues: casting to DataConstant failed (propably a programming error).");
258      }
259      DataArrayView& thisView=getPointDataView();
260      DataArrayView& evView=ev->getPointDataView();
261      DataArrayView::eigenvalues(thisView,0,evView,0);
262    }
263    void
264    DataConstant::eigenvalues_and_eigenvectors(DataAbstract* ev,DataAbstract* V,const double tol)
265    {
266      DataConstant* temp_ev=dynamic_cast<DataConstant*>(ev);
267      if (temp_ev==0) {
268        throw DataException("Error - DataConstant::eigenvalues_and_eigenvectors: casting to DataConstant failed (propably a programming error).");
269      }
270      DataConstant* temp_V=dynamic_cast<DataConstant*>(V);
271      if (temp_V==0) {
272        throw DataException("Error - DataConstant::eigenvalues_and_eigenvectors: casting to DataConstant failed (propably a programming error).");
273      }
274      DataArrayView thisView=getPointDataView();
275      DataArrayView evView=ev->getPointDataView();
276      DataArrayView VView=V->getPointDataView();
277    
278      DataArrayView::eigenvalues_and_eigenvectors(thisView,0,evView,0,VView,tol);
279    }
280    
281    
282  }  // end of namespace  }  // end of namespace

Legend:
Removed from v.108  
changed lines
  Added in v.804

  ViewVC Help
Powered by ViewVC 1.1.26