/[escript]/trunk/escript/src/UnaryOp.h
ViewVC logotype

Contents of /trunk/escript/src/UnaryOp.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 102 - (show annotations)
Wed Dec 15 07:08:39 2004 UTC (14 years, 10 months ago) by jgs
Original Path: trunk/esys2/escript/src/Data/UnaryOp.h
File MIME type: text/plain
File size: 2836 byte(s)
*** empty log message ***

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 */
40
41 template <class UnaryFunction>
42 inline
43 void
44 unaryOp(DataExpanded& data,
45 UnaryFunction operation)
46 {
47 int i,j;
48 DataArrayView::ValueType::size_type numDPPSample=data.getNumDPPSample();
49 DataArrayView::ValueType::size_type numSamples=data.getNumSamples();
50 #pragma omp parallel for private(i,j) schedule(static)
51 for (i=0;i<numSamples;i++) {
52 for (j=0;j<numDPPSample;j++) {
53 data.getPointDataView().unaryOp(data.getPointOffset(i,j),operation);
54 }
55 }
56 }
57
58 template <class UnaryFunction>
59 inline
60 void
61 unaryOp(DataTagged& data,
62 UnaryFunction operation)
63 {
64 // perform the operation on each tagged value
65 const DataTagged::DataMapType& lookup=data.getTagLookup();
66 DataTagged::DataMapType::const_iterator i;
67 DataTagged::DataMapType::const_iterator lookupEnd=lookup.end();
68 DataArrayView& dataView=data.getPointDataView();
69 for (i=lookup.begin();i!=lookupEnd;i++) {
70 dataView.unaryOp(i->second,operation);
71 }
72 // perform the operation on the default value
73 data.getDefaultValue().unaryOp(operation);
74 }
75
76 template <class UnaryFunction>
77 inline
78 void
79 unaryOp(DataConstant& data,
80 UnaryFunction operation)
81 {
82 data.getPointDataView().unaryOp(operation);
83 }
84
85 } // end of namespace
86 #endif

Properties

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

  ViewVC Help
Powered by ViewVC 1.1.26