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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 102 - (hide 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 jgs 102 // $Id$
2 jgs 82 /*
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 jgs 102 #if !defined escript_UnaryOp_20040315_H
17 jgs 82 #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 jgs 102 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 jgs 82 \param data Input/Output - The data.
39     */
40 jgs 102
41 jgs 82 template <class UnaryFunction>
42 jgs 102 inline
43     void
44     unaryOp(DataExpanded& data,
45     UnaryFunction operation)
46 jgs 82 {
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 jgs 102 for (i=0;i<numSamples;i++) {
52     for (j=0;j<numDPPSample;j++) {
53     data.getPointDataView().unaryOp(data.getPointOffset(i,j),operation);
54 jgs 82 }
55     }
56     }
57    
58     template <class UnaryFunction>
59 jgs 102 inline
60     void
61     unaryOp(DataTagged& data,
62     UnaryFunction operation)
63 jgs 82 {
64 jgs 102 // perform the operation on each tagged value
65 jgs 82 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 jgs 102 for (i=lookup.begin();i!=lookupEnd;i++) {
70 jgs 82 dataView.unaryOp(i->second,operation);
71     }
72 jgs 102 // perform the operation on the default value
73 jgs 82 data.getDefaultValue().unaryOp(operation);
74     }
75    
76     template <class UnaryFunction>
77 jgs 102 inline
78     void
79     unaryOp(DataConstant& data,
80     UnaryFunction operation)
81 jgs 82 {
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