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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 682 - (hide annotations)
Mon Mar 27 02:43:09 2006 UTC (13 years, 6 months ago) by robwdcock
File size: 7073 byte(s)
+ NEW BUILD SYSTEM

This commit contains the new build system with cross-platform support.
Most things work are before though you can have more control.

ENVIRONMENT settings have changed:
+ You no longer require LD_LIBRARY_PATH or PYTHONPATH to point to the
esysroot for building and testing performed via scons
+ ACcESS altix users: It is recommended you change your modules to load
the latest intel compiler and other libraries required by boost to match
the setup in svn (you can override). The correct modules are as follows

module load intel_cc.9.0.026
export
MODULEPATH=${MODULEPATH}:/data/raid2/toolspp4/modulefiles/gcc-3.3.6
module load boost/1.33.0/python-2.4.1
module load python/2.4.1
module load numarray/1.3.3


1 jgs 102 //$Id$
2 jgs 82 /*
3 elspeth 615 ************************************************************
4     * Copyright 2006 by ACcESS MNRF *
5     * *
6     * http://www.access.edu.au *
7     * Primary Business: Queensland, Australia *
8     * Licensed under the Open Software License version 3.0 *
9     * http://www.opensource.org/licenses/osl-3.0.php *
10     * *
11     ************************************************************
12 jgs 82 */
13    
14 jgs 474 #include "DataConstant.h"
15     #include "DataException.h"
16 robwdcock 682 #include "esysUtils/EsysAssert.h"
17 jgs 82
18     #include <iostream>
19     #include <boost/python/extract.hpp>
20    
21     using namespace std;
22    
23     namespace escript {
24    
25 jgs 102 DataConstant::DataConstant(const boost::python::numeric::array& value,
26     const FunctionSpace& what)
27     : DataAbstract(what)
28     {
29     DataArray temp(value);
30     //
31     // copy the data in the correct format
32     m_data=temp.getData();
33 jgs 119 //
34     // create the view of the data
35 jgs 102 DataArrayView tempView(m_data,temp.getView().getShape());
36     setPointDataView(tempView);
37     }
38 jgs 82
39 jgs 102 DataConstant::DataConstant(const DataArrayView& value,
40     const FunctionSpace& what)
41     : DataAbstract(what)
42     {
43     //
44     // copy the data in the correct format
45     m_data=value.getData();
46 jgs 119 //
47     // create the view of the data
48 jgs 102 DataArrayView tempView(m_data,value.getShape());
49     setPointDataView(tempView);
50     }
51 jgs 82
52 jgs 102 DataConstant::DataConstant(const DataConstant& other)
53     : DataAbstract(other.getFunctionSpace())
54     {
55     //
56     // copy the data in the correct format
57     m_data=other.m_data;
58 jgs 119 //
59     // create the view of the data
60 jgs 102 DataArrayView tempView(m_data,other.getPointDataView().getShape());
61     setPointDataView(tempView);
62     }
63 jgs 82
64 jgs 102 DataConstant::DataConstant(const DataConstant& other,
65     const DataArrayView::RegionType& region)
66     : DataAbstract(other.getFunctionSpace())
67     {
68     //
69     // get the shape of the slice to copy from
70     DataArrayView::ShapeType shape(DataArrayView::getResultSliceShape(region));
71     //
72     // allocate space for this new DataConstant's data
73 jgs 151 int len = DataArrayView::noValues(shape);
74     m_data.resize(len,0.,len);
75 jgs 102 //
76     // create a view of the data with the correct shape
77     DataArrayView tempView(m_data,shape);
78 jgs 108 DataArrayView::RegionLoopRangeType region_loop_range=getSliceRegionLoopRange(region);
79 jgs 119 //
80     // load the view with the data from the slice
81 jgs 108 tempView.copySlice(other.getPointDataView(),region_loop_range);
82 jgs 119 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 jgs 102 //
91 jgs 119 // 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 jgs 102 setPointDataView(tempView);
97     }
98 jgs 82
99 jgs 102 string
100     DataConstant::toString() const
101     {
102     return getPointDataView().toString("");
103     }
104 jgs 82
105 jgs 102 DataArrayView::ValueType::size_type
106     DataConstant::getPointOffset(int sampleNo,
107     int dataPointNo) const
108     {
109     EsysAssert((validSamplePointNo(dataPointNo) && validSampleNo(sampleNo)),
110     "Invalid index, sampleNo: " << sampleNo << " dataPointNo: " << dataPointNo);
111 jgs 122 //
112     // Whatever the coord's always return the same value as this is constant data.
113 jgs 102 return 0;
114     }
115 jgs 82
116 jgs 102 DataArrayView::ValueType::size_type
117     DataConstant::getLength() const
118     {
119     return m_data.size();
120     }
121 jgs 82
122 jgs 102 DataArrayView
123     DataConstant::getDataPoint(int sampleNo,
124     int dataPointNo)
125     {
126     EsysAssert((validSamplePointNo(dataPointNo) && validSampleNo(sampleNo)),
127     "Invalid index, sampleNo: " << sampleNo << " dataPointNo: " << dataPointNo);
128     //
129     // Whatever the coord's always return the same value as this is constant data.
130     return getPointDataView();
131     }
132 jgs 82
133 jgs 102 DataAbstract*
134     DataConstant::getSlice(const DataArrayView::RegionType& region) const
135     {
136     return new DataConstant(*this,region);
137     }
138 jgs 82
139 jgs 102 void
140     DataConstant::setSlice(const DataAbstract* value,
141     const DataArrayView::RegionType& region)
142     {
143     const DataConstant* tempDataConst=dynamic_cast<const DataConstant*>(value);
144     if (tempDataConst==0) {
145     throw DataException("Programming error - casting to DataConstant.");
146 jgs 82 }
147 jgs 108 //
148     DataArrayView::ShapeType shape(DataArrayView::getResultSliceShape(region));
149     DataArrayView::RegionLoopRangeType region_loop_range=getSliceRegionLoopRange(region);
150     //
151     // check shape:
152     if (getPointDataView().getRank()!=region.size()) {
153     throw DataException("Error - Invalid slice region.");
154     }
155     if (tempDataConst->getPointDataView().getRank()>0 and !value->getPointDataView().checkShape(shape)) {
156     throw DataException (value->getPointDataView().createShapeErrorMessage(
157     "Error - Couldn't copy slice due to shape mismatch.",shape));
158     }
159     //
160     getPointDataView().copySliceFrom(tempDataConst->getPointDataView(),region_loop_range);
161 jgs 102 }
162 jgs 82
163 jgs 102 void
164     DataConstant::reshapeDataPoint(const DataArrayView::ShapeType& shape)
165     {
166     if (getPointDataView().getRank()!=0) {
167     stringstream temp;
168     temp << "Error - Can only reshape Data with data points of rank 0. "
169     << "This Data has data points with rank: " << getPointDataView().getRank();
170     throw DataException(temp.str());
171 jgs 82 }
172 jgs 151 int len = DataArrayView::noValues(shape);
173     m_data.resize(len,getPointDataView()(),len);
174 jgs 102 DataArrayView newView(m_data,shape);
175     setPointDataView(newView);
176     }
177 jgs 82
178 jgs 123 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 gross 580 void
193     DataConstant::eigenvalues(DataAbstract* ev)
194     {
195     DataConstant* temp_ev=dynamic_cast<DataConstant*>(ev);
196     if (temp_ev==0) {
197     throw DataException("Error - DataConstant::eigenvalues: casting to DataConstant failed (propably a programming error).");
198     }
199     DataArrayView& thisView=getPointDataView();
200     DataArrayView& evView=ev->getPointDataView();
201     DataArrayView::eigenvalues(thisView,0,evView,0);
202     }
203     void
204     DataConstant::eigenvalues_and_eigenvectors(DataAbstract* ev,DataAbstract* V,const double tol)
205     {
206     DataConstant* temp_ev=dynamic_cast<DataConstant*>(ev);
207     if (temp_ev==0) {
208     throw DataException("Error - DataConstant::eigenvalues_and_eigenvectors: casting to DataConstant failed (propably a programming error).");
209     }
210     DataConstant* temp_V=dynamic_cast<DataConstant*>(V);
211     if (temp_V==0) {
212     throw DataException("Error - DataConstant::eigenvalues_and_eigenvectors: casting to DataConstant failed (propably a programming error).");
213     }
214     DataArrayView thisView=getPointDataView();
215     DataArrayView evView=ev->getPointDataView();
216     DataArrayView VView=V->getPointDataView();
217    
218     DataArrayView::eigenvalues_and_eigenvectors(thisView,0,evView,0,VView,tol);
219     }
220    
221    
222 jgs 82 } // end of namespace

Properties

Name Value
svn:eol-style native
svn:keywords Author Date Id Revision

  ViewVC Help
Powered by ViewVC 1.1.26