Stokhos Package Browser (Single Doxygen Collection)  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Stokhos_MP_Vector_MaskTraits_expr_relops_tmpl.hpp
Go to the documentation of this file.
1 // @HEADER
2 // *****************************************************************************
3 // Stokhos Package
4 //
5 // Copyright 2009 NTESS and the Stokhos contributors.
6 // SPDX-License-Identifier: BSD-3-Clause
7 // *****************************************************************************
8 // @HEADER
9 
10 namespace Sacado {
11  namespace MP {
12 
13  template <typename V, typename V2>
14  KOKKOS_INLINE_FUNCTION
15  Mask<V>
16  operator OPNAME (const Expr<V> &a1,
17  const Expr<V2> &a2)
18  {
19  const V& v1 = a1.derived();
20  const V2& v2 = a2.derived();
21  Mask<V> mask;
22  if (v2.hasFastAccess(v1.size())) {
23 #ifdef STOKHOS_HAVE_PRAGMA_IVDEP
24 #pragma ivdep
25 #endif
26 #ifdef STOKHOS_HAVE_PRAGMA_VECTOR_ALIGNED
27 #pragma vector aligned
28 #endif
29 #ifdef STOKHOS_HAVE_PRAGMA_UNROLL
30 #pragma unroll
31 #endif
32  for(std::size_t i=0; i<mask.size; ++i)
33  mask.set(i, v1.fastAccessCoeff(i) OPNAME v2.fastAccessCoeff(i));
34  }
35  else{
36 #ifdef STOKHOS_HAVE_PRAGMA_IVDEP
37 #pragma ivdep
38 #endif
39 #ifdef STOKHOS_HAVE_PRAGMA_VECTOR_ALIGNED
40 #pragma vector aligned
41 #endif
42 #ifdef STOKHOS_HAVE_PRAGMA_UNROLL
43 #pragma unroll
44 #endif
45  for(std::size_t i=0; i<mask.size; ++i)
46  mask.set(i, v1.fastAccessCoeff(i) OPNAME v2.coeff(i));
47  }
48  return mask;
49  }
50 
51  template <typename V, typename V2>
52  KOKKOS_INLINE_FUNCTION
53  Mask<V>
54  operator OPNAME (const volatile Expr<V> &a1,
55  const volatile Expr<V2> &a2)
56  {
57  const volatile V& v1 = a1.derived();
58  const volatile V2& v2 = a2.derived();
59  Mask<V> mask;
60  if (v2.hasFastAccess(v1.size())) {
61 #ifdef STOKHOS_HAVE_PRAGMA_IVDEP
62 #pragma ivdep
63 #endif
64 #ifdef STOKHOS_HAVE_PRAGMA_VECTOR_ALIGNED
65 #pragma vector aligned
66 #endif
67 #ifdef STOKHOS_HAVE_PRAGMA_UNROLL
68 #pragma unroll
69 #endif
70  for(std::size_t i=0; i<mask.size; ++i)
71  mask.set(i, v1.fastAccessCoeff(i) OPNAME v2.fastAccessCoeff(i));
72  }
73  else{
74 #ifdef STOKHOS_HAVE_PRAGMA_IVDEP
75 #pragma ivdep
76 #endif
77 #ifdef STOKHOS_HAVE_PRAGMA_VECTOR_ALIGNED
78 #pragma vector aligned
79 #endif
80 #ifdef STOKHOS_HAVE_PRAGMA_UNROLL
81 #pragma unroll
82 #endif
83  for(std::size_t i=0; i<mask.size; ++i)
84  mask.set(i, v1.fastAccessCoeff(i) OPNAME v2.coeff(i));
85  }
86  return mask;
87  }
88 
89  template <typename V, typename V2>
90  KOKKOS_INLINE_FUNCTION
91  Mask<V>
92  operator OPNAME (const Expr<V> &a1,
93  const volatile Expr<V2> &a2)
94  {
95  const V& v1 = a1.derived();
96  const volatile V2& v2 = a2.derived();
97  Mask<V> mask;
98  if (v2.hasFastAccess(v1.size())) {
99 #ifdef STOKHOS_HAVE_PRAGMA_IVDEP
100 #pragma ivdep
101 #endif
102 #ifdef STOKHOS_HAVE_PRAGMA_VECTOR_ALIGNED
103 #pragma vector aligned
104 #endif
105 #ifdef STOKHOS_HAVE_PRAGMA_UNROLL
106 #pragma unroll
107 #endif
108  for(std::size_t i=0; i<mask.size; ++i)
109  mask.set(i, v1.fastAccessCoeff(i) OPNAME v2.fastAccessCoeff(i));
110  }
111  else{
112 #ifdef STOKHOS_HAVE_PRAGMA_IVDEP
113 #pragma ivdep
114 #endif
115 #ifdef STOKHOS_HAVE_PRAGMA_VECTOR_ALIGNED
116 #pragma vector aligned
117 #endif
118 #ifdef STOKHOS_HAVE_PRAGMA_UNROLL
119 #pragma unroll
120 #endif
121  for(std::size_t i=0; i<mask.size; ++i)
122  mask.set(i, v1.fastAccessCoeff(i) OPNAME v2.coeff(i));
123  }
124  return mask;
125  }
126 
127  template <typename V, typename V2>
128  KOKKOS_INLINE_FUNCTION
129  Mask<V>
130  operator OPNAME (const volatile Expr<V> &a1,
131  const Expr<V2> &a2)
132  {
133  const volatile V& v1 = a1.derived();
134  const V2& v2 = a2.derived();
135  Mask<V> mask;
136  if (v2.hasFastAccess(v1.size())) {
137 #ifdef STOKHOS_HAVE_PRAGMA_IVDEP
138 #pragma ivdep
139 #endif
140 #ifdef STOKHOS_HAVE_PRAGMA_VECTOR_ALIGNED
141 #pragma vector aligned
142 #endif
143 #ifdef STOKHOS_HAVE_PRAGMA_UNROLL
144 #pragma unroll
145 #endif
146  for(std::size_t i=0; i<mask.size; ++i)
147  mask.set(i, v1.fastAccessCoeff(i) OPNAME v2.fastAccessCoeff(i));
148  }
149  else{
150 #ifdef STOKHOS_HAVE_PRAGMA_IVDEP
151 #pragma ivdep
152 #endif
153 #ifdef STOKHOS_HAVE_PRAGMA_VECTOR_ALIGNED
154 #pragma vector aligned
155 #endif
156 #ifdef STOKHOS_HAVE_PRAGMA_UNROLL
157 #pragma unroll
158 #endif
159  for(std::size_t i=0; i<mask.size; ++i)
160  mask.set(i, v1.fastAccessCoeff(i) OPNAME v2.coeff(i));
161  }
162  return mask;
163  }
164 
165  template <typename V>
166  KOKKOS_INLINE_FUNCTION
167  Mask<V>
168  operator OPNAME (const Expr<V> &a1,
169  const typename V::value_type &a2)
170  {
171  const V& v1 = a1.derived();
172  Mask<V> mask;
173 #ifdef STOKHOS_HAVE_PRAGMA_IVDEP
174 #pragma ivdep
175 #endif
176 #ifdef STOKHOS_HAVE_PRAGMA_VECTOR_ALIGNED
177 #pragma vector aligned
178 #endif
179 #ifdef STOKHOS_HAVE_PRAGMA_UNROLL
180 #pragma unroll
181 #endif
182  for(std::size_t i=0; i<mask.size; ++i)
183  mask.set(i, v1.fastAccessCoeff(i) OPNAME a2);
184  return mask;
185  }
186 
187  template <typename V>
188  KOKKOS_INLINE_FUNCTION
189  Mask<V>
190  operator OPNAME (const volatile Expr<V> &a1,
191  const typename V::value_type &a2)
192  {
193  const volatile V& v1 = a1.derived();
194  Mask<V> mask;
195 #ifdef STOKHOS_HAVE_PRAGMA_IVDEP
196 #pragma ivdep
197 #endif
198 #ifdef STOKHOS_HAVE_PRAGMA_VECTOR_ALIGNED
199 #pragma vector aligned
200 #endif
201 #ifdef STOKHOS_HAVE_PRAGMA_UNROLL
202 #pragma unroll
203 #endif
204  for(std::size_t i=0; i<mask.size; ++i)
205  mask.set(i, v1.fastAccessCoeff(i) OPNAME a2);
206  return mask;
207  }
208 
209  template <typename V>
210  KOKKOS_INLINE_FUNCTION
211  Mask<V>
212  operator OPNAME (const typename V::value_type &a1,
213  const Expr<V> &a2)
214  {
215  const V& v2 = a2.derived();
216  Mask<V> mask;
217 #ifdef STOKHOS_HAVE_PRAGMA_IVDEP
218 #pragma ivdep
219 #endif
220 #ifdef STOKHOS_HAVE_PRAGMA_VECTOR_ALIGNED
221 #pragma vector aligned
222 #endif
223 #ifdef STOKHOS_HAVE_PRAGMA_UNROLL
224 #pragma unroll
225 #endif
226  for(std::size_t i=0; i<mask.size; ++i)
227  mask.set(i, a1 OPNAME v2.fastAccessCoeff(i));
228  return mask;
229  }
230 
231  template <typename V>
232  KOKKOS_INLINE_FUNCTION
233  Mask<V>
234  operator OPNAME (const typename V::value_type &a1,
235  const volatile Expr<V> &a2)
236  {
237  const volatile V& v2 = a2.derived();
238  Mask<V> mask;
239 #ifdef STOKHOS_HAVE_PRAGMA_IVDEP
240 #pragma ivdep
241 #endif
242 #ifdef STOKHOS_HAVE_PRAGMA_VECTOR_ALIGNED
243 #pragma vector aligned
244 #endif
245 #ifdef STOKHOS_HAVE_PRAGMA_UNROLL
246 #pragma unroll
247 #endif
248  for(std::size_t i=0; i<mask.size; ++i)
249  mask.set(i, a1 OPNAME v2.fastAccessCoeff(i));
250  return mask;
251  }
252  }
253 }
static const std::size_t size
KOKKOS_INLINE_FUNCTION void set(int i, bool b)
KOKKOS_INLINE_FUNCTION Vector< Stokhos::StaticFixedStorage< O, T, N, D > > OPNAME(const Vector< Stokhos::StaticFixedStorage< O, T, N, D > > &a, const Vector< Stokhos::StaticFixedStorage< O, T, N, D > > &b)