17 #if !defined escript_DataAlgorithm_20040714_H
18 #define escript_DataAlgorithm_20040714_H
43 template <
class BinaryFunction>
86 struct FMax :
public std::binary_function<double,double,double>
98 struct FMin :
public std::binary_function<double,double,double>
102 return std::min(x,y);
110 struct AbsMax :
public std::binary_function<double,double,double>
114 return std::max(fabs(x),fabs(y));
122 struct AbsMin :
public std::binary_function<double,double,double>
126 return std::min(fabs(x),fabs(y));
134 struct Length :
public std::binary_function<double,double,double>
138 return std::sqrt(std::pow(x,2)+std::pow(y,2));
146 struct Trace :
public std::binary_function<double,double,double>
157 struct AbsGT :
public std::binary_function<double,double,double>
168 struct AbsLTE :
public std::binary_function<double,double,double>
182 template <
class BinaryFunction>
186 BinaryFunction operation,
187 double initial_value)
192 double global_current_value=initial_value;
193 double local_current_value;
199 #pragma omp parallel private(local_current_value)
201 local_current_value=initial_value;
202 #pragma omp for private(i,j) schedule(static)
203 for (i=0;i<numSamples;i++) {
204 for (j=0;j<numDPPSample;j++) {
211 global_current_value=operation(global_current_value,local_current_value);
213 return global_current_value;
217 template <
class BinaryFunction>
221 BinaryFunction operation,
222 double initial_value)
224 double current_value=initial_value;
230 for (std::list<int>::const_iterator i=used.begin();i!=used.end();++i)
239 DataTagged::DataMapType::const_iterator it=lookup.find(tag);
240 if (it!=lookup.end())
242 current_value=operation(current_value,
DataMaths::reductionOp(vec,shape,it->second,operation,initial_value));
246 return current_value;
249 template <
class BinaryFunction>
253 BinaryFunction operation,
254 double initial_value)
270 template <
class BinaryFunction>
275 BinaryFunction operation,
276 double initial_value)
288 #pragma omp parallel for private(i,j) schedule(static)
289 for (i=0;i<numSamples;i++) {
290 for (j=0;j<numDPPSample;j++) {
300 template <
class BinaryFunction>
305 BinaryFunction operation,
306 double initial_value)
313 for (DataTagged::DataMapType::const_iterator i=lookup.begin(); i!=lookup.end(); i++) {
322 template <
class BinaryFunction>
327 BinaryFunction operation,
328 double initial_value)