16#ifndef ConstIJK_ptr_included
17#define ConstIJK_ptr_included
21enum class DIRECTION { X=0, Y=1, Z=2 };
29template <
typename _TYPE_,
typename _TYPE_ARRAY_>
38 ptr_ = &field(i, j, k);
42 const int ghost = field.
ghost();
71 center =
ptr_[i_offset];
77 void get_left_center(DIRECTION _DIR_,
int i_offset, _TYPE_ & left, _TYPE_ & center)
const
79 if(_DIR_ == DIRECTION::X)
82 left =
ptr_[i_offset - 1];
83 center =
ptr_[i_offset];
85 if(_DIR_ == DIRECTION::Y)
89 center =
ptr_[i_offset];
92 if(_DIR_ == DIRECTION::Z)
96 center =
ptr_[i_offset];
101 void get_center_right(DIRECTION _DIR_,
int i_offset, _TYPE_ & center, _TYPE_ & right)
const
103 if(_DIR_ == DIRECTION::X)
106 center =
ptr_[i_offset];
107 right =
ptr_[i_offset + 1];
109 if(_DIR_ == DIRECTION::Y)
113 center =
ptr_[i_offset];
116 if(_DIR_ == DIRECTION::Z)
120 center =
ptr_[i_offset];
128 if(_DIR_ == DIRECTION::X)
131 left =
ptr_[i_offset - 1];
132 center =
ptr_[i_offset];
133 right =
ptr_[i_offset + 1];
135 if(_DIR_ == DIRECTION::Y)
139 center =
ptr_[i_offset];
143 if(_DIR_ == DIRECTION::Z)
147 center =
ptr_[i_offset];
156 if(_DIR_ == DIRECTION::X)
159 leftleft =
ptr_[i_offset-2];
160 left =
ptr_[i_offset-1];
161 center =
ptr_[i_offset];
162 right =
ptr_[i_offset+1];
164 if(_DIR_ == DIRECTION::Y)
170 center =
ptr_[i_offset];
173 if(_DIR_ == DIRECTION::Z)
179 center =
ptr_[i_offset];
189 center = SimdGet(
ptr_ + i_offset);
194 if(_DIR_ == DIRECTION::X)
197 SimdGetLeftCenter(
ptr_ + i_offset, left, center);
199 if(_DIR_ == DIRECTION::Y)
203 center = SimdGet(
ptr_ + i_offset);
207 if(_DIR_ == DIRECTION::Z)
211 center = SimdGet(
ptr_ + i_offset);
219 if(_DIR_ == DIRECTION::X)
222 SimdGetCenterRight(
ptr_ + i_offset, center, right);
224 if(_DIR_ == DIRECTION::Y)
228 center = SimdGet(
ptr_ + i_offset);
231 if(_DIR_ == DIRECTION::Z)
235 center = SimdGet(
ptr_ + i_offset);
243 if(_DIR_ == DIRECTION::X)
246 SimdGetLeftCenterRight(
ptr_ + i_offset, left, center, right);
248 if(_DIR_ == DIRECTION::Y)
252 center = SimdGet(
ptr_ + i_offset);
256 if(_DIR_ == DIRECTION::Z)
260 center = SimdGet(
ptr_ + i_offset);
269 if(_DIR_ == DIRECTION::X)
272 SimdGetLeftleftLeftCenterRight(
ptr_ + i_offset, leftleft, left, center, right);
274 if(_DIR_ == DIRECTION::Y)
280 center = SimdGet(
ptr_ + i_offset);
283 if(_DIR_ == DIRECTION::Z)
289 center = SimdGet(
ptr_ + i_offset);
296 if(_COMPO1_ != DIRECTION::X && _COMPO2_ != DIRECTION::X)
301 leftc1_centerc2 = SimdGet(
ptr_ + i_offset - stride1);
302 centerc1_leftc2 = SimdGet(
ptr_ + i_offset - stride2);
303 centerc1_centerc2 = SimdGet(
ptr_ + i_offset);
307 if(_COMPO1_ == DIRECTION::X)
310 SimdGetLeftCenter(
ptr_ + i_offset - stride, leftc1_leftc2, centerc1_leftc2);
311 SimdGetLeftCenter(
ptr_ + i_offset, leftc1_centerc2, centerc1_centerc2);
316 SimdGetLeftCenter(
ptr_ + i_offset - stride, leftc1_leftc2, leftc1_centerc2);
317 SimdGetLeftCenter(
ptr_ + i_offset, centerc1_leftc2, centerc1_centerc2);
334 int get_stride(DIRECTION _COMPO_)
344 Cerr <<
"ConstIJK_ptr::get_stride compo x not allowed" << finl;
This class implements a accessor to IJK_Field values.
void get_left_center_c1c2(DIRECTION _COMPO1_, DIRECTION _COMPO2_, int i_offset, Simd_template< _TYPE_ > &leftc1_leftc2, Simd_template< _TYPE_ > &leftc1_centerc2, Simd_template< _TYPE_ > ¢erc1_leftc2, Simd_template< _TYPE_ > ¢erc1_centerc2) const
void get_center(int i_offset, Simd_template< _TYPE_ > ¢er) const
ConstIJK_ptr(const IJK_Field_local_template< _TYPE_, _TYPE_ARRAY_ > &field, int i, int j, int k)
builds a pointer to field(i,j,k);
void get_left_center_right(DIRECTION _DIR_, int i_offset, Simd_template< _TYPE_ > &left, Simd_template< _TYPE_ > ¢er, Simd_template< _TYPE_ > &right) const
void get_center(int i_offset, _TYPE_ ¢er) const
returns field(i+i_offset, j, k)
void get_leftleft_left_center_right(DIRECTION _DIR_, int i_offset, _TYPE_ &leftleft, _TYPE_ &left, _TYPE_ ¢er, _TYPE_ &right) const
void get_leftleft_left_center_right(DIRECTION _DIR_, int i_offset, Simd_template< _TYPE_ > &leftleft, Simd_template< _TYPE_ > &left, Simd_template< _TYPE_ > ¢er, Simd_template< _TYPE_ > &right) const
void get_left_center_right(DIRECTION _DIR_, int i_offset, _TYPE_ &left, _TYPE_ ¢er, _TYPE_ &right) const
void next_j()
increments the pointer by j_stride (eg, j = j+1)
void get_left_center(DIRECTION _DIR_, int i_offset, Simd_template< _TYPE_ > &left, Simd_template< _TYPE_ > ¢er) const
void get_left_center(DIRECTION _DIR_, int i_offset, _TYPE_ &left, _TYPE_ ¢er) const
returns left=field(i+i_offset-1, j, k) and center=field(i+i_offset, j, k)
void get_center_right(DIRECTION _DIR_, int i_offset, _TYPE_ ¢er, _TYPE_ &right) const
void get_center_right(DIRECTION _DIR_, int i_offset, Simd_template< _TYPE_ > ¢er, Simd_template< _TYPE_ > &right) const
: This class describes a scalar field in an ijk box without any parallel information.
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
This class provides a generic access to simd operations on x86, x86 AMD and ARM architectures.