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

Contents of /trunk/escript/src/DataAbstract.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 921 - (show annotations)
Fri Jan 5 00:54:37 2007 UTC (12 years, 11 months ago) by gross
File size: 5089 byte(s)
I have done some clarification on functions that allow to access individual data point values in a Data object. 
The term "data point number" is always local on a MPI process and referes to the value (data_point_in_sample, sample)
as a single identifyer (data_point_in_sample + sample * number_data_points_per_sample). a "global data point number"
referes to a tuple of a processour id and local data point number.

The function convertToNumArrayFromSampleNo has been removed now and convertToNumArrayFromDPNo renamed to getValueOfDataPoint.
There are two new functions:

   getNumberOfDataPoints
   setValueOfDataPoint

This allows you to do things like:

  in=Data(..)
  out=Data(..)
   for i in xrange(in.getNumberOfDataPoints())
       in_loc=in.getValueOfDataPoint(i)
       out_loc=< some operations on in_loc>
       out.setValueOfDataPoint(i,out_loc)


Also mindp  is renamed to  minGlobalDataPoint and there is a new function getValueOfGlobalDataPoint. While in MPI the functions getNumberOfDataPoints and getValueOfDataPoint are working locally on each process (so the code above is executed in parallel).
the latter allows getting a single value across all processors. 


1 // $Id$
2 /*
3 ************************************************************
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 */
13
14 #include "DataAbstract.h"
15 #include "DataException.h"
16
17 using namespace std;
18
19 namespace escript {
20
21 DataAbstract::DataAbstract(const FunctionSpace& what):
22 m_noDataPointsPerSample(what.getNumDPPSample()),
23 m_noSamples(what.getNumSamples()),
24 m_functionSpace(what)
25 {
26 }
27
28 DataAbstract::~DataAbstract()
29 {
30 }
31
32 void
33 DataAbstract::setPointDataView(const DataArrayView& input)
34 {
35 m_pointDataView.reset(new DataArrayView(input.getData(),input.getShape(),input.getOffset()));
36 }
37
38 void
39 DataAbstract::resetPointDataView()
40 {
41 m_pointDataView.reset(new DataArrayView());
42 }
43
44 void
45 DataAbstract::operandCheck(const DataAbstract& right) const
46 {
47 if ((right.getNumDPPSample()!=getNumDPPSample()) ||
48 (right.getNumSamples()!=getNumSamples()) ||
49 (right.getFunctionSpace()!=getFunctionSpace())) {
50 stringstream temp;
51 temp << "Error - Right hand argument sample shape or function space "
52 << "incompatible with left." << endl
53 << "LHS: (" << getNumSamples() << ","
54 << getNumDPPSample() << ") " << getFunctionSpace().toString()
55 << endl
56 << "RHS: (" << right.getNumSamples() << ","
57 << right.getNumDPPSample() << ") "
58 << right.getFunctionSpace().toString();
59 throw DataException(temp.str());
60 }
61
62 //
63 // Check the shape of the point data, a rank of 0(scalar) is okay
64 if (!((right.getPointDataView().getRank()==0) ||
65 (right.getPointDataView().getShape()==getPointDataView().getShape())))
66 {
67 stringstream temp;
68 temp << "Error - Right hand argument point data shape: "
69 << DataArrayView::shapeToString(right.getPointDataView().getShape())
70 << " doesn't match left: "
71 << DataArrayView::shapeToString(getPointDataView().getShape());
72 throw DataException(temp.str());
73 }
74 }
75
76 DataAbstract::ValueType::value_type*
77 DataAbstract::getSampleDataByTag(int tag)
78 {
79 throw DataException("Error - DataAbstract::getSampleDataByTag: Data type does not have tag values.");
80 }
81
82 void
83 DataAbstract::setTaggedValue(int tagKey,
84 const DataArrayView& value)
85 {
86 throw DataException("Error - DataAbstract::setTaggedValue: Data type does not have tag values.");
87 }
88
89 int
90 DataAbstract::getTagNumber(int dpno)
91 {
92 throw DataException("Error - DataAbstract::getTagNumber: Data type cannot be accessed by tag values.");
93 return (0);
94 }
95
96 void
97 DataAbstract::setRefValue(int ref,
98 const DataArray& value)
99 {
100 throw DataException("Error - DataAbstract::setRefValue: Data type cannot be accessed by reference values.");
101 }
102
103 void
104 DataAbstract::getRefValue(int ref,
105 DataArray& value)
106 {
107 throw DataException("Error - DataAbstract::getRefValue: Data type cannot be accessed by reference values.");
108 }
109
110 int
111 DataAbstract::archiveData(ofstream& archiveFile,
112 const ValueType::size_type noValues) const
113 {
114 return 0;
115 }
116
117 int
118 DataAbstract::extractData(ifstream& archiveFile,
119 const ValueType::size_type noValues)
120 {
121 return 0;
122 }
123
124 void
125 DataAbstract::copyAll(const boost::python::numeric::array& value)
126 {
127 throw DataException("Error - DataAbstract::copying data from numarray objects is not supported.");
128 }
129 void
130 DataAbstract::copyToDataPoint(const int sampleNo, const int dataPointNo, const boost::python::numeric::array& value)
131 {
132 throw DataException("Error - DataAbstract::copying data from numarray objects to a single data point is not supported.");
133 }
134
135 void
136 DataAbstract::symmetric(DataAbstract* ev)
137 {
138 throw DataException("Error - DataAbstract::symmetric is not supported.");
139 }
140
141 void
142 DataAbstract::nonsymmetric(DataAbstract* ev)
143 {
144 throw DataException("Error - DataAbstract::nonsymmetric is not supported.");
145 }
146
147 void
148 DataAbstract::trace(DataAbstract* ev, int axis_offset)
149 {
150 throw DataException("Error - DataAbstract::trace is not supported.");
151 }
152
153 void
154 DataAbstract::swapaxes(DataAbstract* ev, int axis0, int axis1)
155 {
156 throw DataException("Error - DataAbstract::component swapaxes is not supported.");
157 }
158 void
159 DataAbstract::transpose(DataAbstract* ev, int axis_offset)
160 {
161 throw DataException("Error - DataAbstract::transpose is not supported.");
162 }
163
164 void
165 DataAbstract::eigenvalues(DataAbstract* ev)
166 {
167 throw DataException("Error - DataAbstract::eigenvalues is not supported.");
168
169 }
170 void
171 DataAbstract::eigenvalues_and_eigenvectors(DataAbstract* ev,DataAbstract* V,const double tol)
172 {
173 throw DataException("Error - DataAbstract::eigenvalues_and_eigenvectors is not supported.");
174
175 }
176
177
178
179 } // end of namespace

Properties

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

  ViewVC Help
Powered by ViewVC 1.1.26