/[escript]/branches/arrayview_from_1695_trunk/escript/src/UnaryOp.h
ViewVC logotype

Contents of /branches/arrayview_from_1695_trunk/escript/src/UnaryOp.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 121 - (show annotations)
Fri May 6 04:26:16 2005 UTC (14 years, 5 months ago) by jgs
Original Path: trunk/esys2/escript/src/Data/UnaryOp.h
File MIME type: text/plain
File size: 2890 byte(s)
Merge of development branch back to main trunk on 2005-05-06

1 // $Id$
2 /*
3 ******************************************************************************
4 * *
5 * COPYRIGHT ACcESS 2004 - All Rights Reserved *
6 * *
7 * This software is the property of ACcESS. No part of this code *
8 * may be copied in any form or by any means without the expressed written *
9 * consent of ACcESS. Copying, use or modification of this software *
10 * by any unauthorised person is illegal unless that person has a software *
11 * license agreement with ACcESS. *
12 * *
13 ******************************************************************************
14 */
15
16 #if !defined escript_UnaryOp_20040315_H
17 #define escript_UnaryOp_20040315_H
18
19 #include "escript/Data/DataException.h"
20 #include "escript/Data/DataArrayView.h"
21 #include "escript/Data/DataConstant.h"
22 #include "escript/Data/DataExpanded.h"
23 #include "escript/Data/DataTagged.h"
24
25 #include <iostream>
26 #include <boost/scoped_ptr.hpp>
27 #include <functional>
28 #include <string>
29
30 namespace escript {
31
32 /**
33 \brief
34 Perform the given unary operation on each data point of the given Data object.
35 Called by Data::unaryOp.
36 Calls DataArrayView::unaryOp.
37 For DataExpanded objects, operation is done in parallel.
38 \param data Input/Output - The data.
39 \param operation Input - The operation to perform.
40 */
41
42 template <class UnaryFunction>
43 inline
44 void
45 unaryOp(DataExpanded& data,
46 UnaryFunction operation)
47 {
48 int i,j;
49 DataArrayView::ValueType::size_type numDPPSample=data.getNumDPPSample();
50 DataArrayView::ValueType::size_type numSamples=data.getNumSamples();
51 #pragma omp parallel for private(i,j) schedule(static)
52 for (i=0;i<numSamples;i++) {
53 for (j=0;j<numDPPSample;j++) {
54 data.getPointDataView().unaryOp(data.getPointOffset(i,j),operation);
55 }
56 }
57 }
58
59 template <class UnaryFunction>
60 inline
61 void
62 unaryOp(DataTagged& data,
63 UnaryFunction operation)
64 {
65 // perform the operation on each tagged value
66 const DataTagged::DataMapType& lookup=data.getTagLookup();
67 DataTagged::DataMapType::const_iterator i;
68 DataTagged::DataMapType::const_iterator lookupEnd=lookup.end();
69 DataArrayView& dataView=data.getPointDataView();
70 for (i=lookup.begin();i!=lookupEnd;i++) {
71 dataView.unaryOp(i->second,operation);
72 }
73 // perform the operation on the default value
74 data.getDefaultValue().unaryOp(operation);
75 }
76
77 template <class UnaryFunction>
78 inline
79 void
80 unaryOp(DataConstant& data,
81 UnaryFunction operation)
82 {
83 data.getPointDataView().unaryOp(operation);
84 }
85
86 } // end of namespace
87 #endif

Properties

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

  ViewVC Help
Powered by ViewVC 1.1.26