9 #ifndef CopyAndInterleave_h 10 #define CopyAndInterleave_h 20 template<
typename DTYPE>
23 int dim0 = dview.dimension(0);
24 int dim1 = dview.dimension(1);
25 int dim2 = dview.dimension(2);
27 for(
int i=0; i<dim0; ++i) {
28 for(
int j=0; j<dim1; ++j) {
29 for(
int k=0; k<dim2; ++k) {
30 stk::simd::set_data(dview(i,j,k), simdIndex, sview(i,j,k));
36 template<
typename DTYPE>
39 int dim0 = dview.dimension(0);
40 int dim1 = dview.dimension(1);
41 for(
int i=0; i<dim0; ++i) {
42 for(
int j=0; j<dim1; ++j) {
43 stk::simd::set_data(dview(i,j), simdIndex, sview(i,j));
48 template<
typename DTYPE>
51 int dim = dview.dimension(0);
53 for(
int i=0; i<dim; ++i) {
54 stk::simd::set_data(dview(i), simdIndex, sview(i));
58 template<
typename DTYPE>
61 int dim = dview.dimension(0);
63 for(
int i=0; i<dim; ++i) {
65 for(
int simdIndex=0; simdIndex<simdElems; ++simdIndex) {
66 stk::simd::set_data(d, simdIndex, sviews[simdIndex][i]);
71 template<
typename DTYPE>
74 int len = dview.dimension(0)*dview.dimension(1);
76 for(
int idx=0; idx<len; ++idx) {
78 for(
int simdIndex=0; simdIndex<simdElems; ++simdIndex) {
79 stk::simd::set_data(dv, simdIndex, sviews[simdIndex][idx]);
84 template<
typename DTYPE>
87 int len = dview.dimension(0)*dview.dimension(1)*dview.dimension(2);
89 for(
int idx=0; idx<len; ++idx) {
91 for(
int simdIndex=0; simdIndex<simdElems; ++simdIndex) {
92 stk::simd::set_data(dv, simdIndex, sviews[simdIndex][idx]);
100 const double* smemviews[stk::simd::ndoubles];
102 for(
int i=0; i<simdElems; ++i) {
112 const double* smemviews[stk::simd::ndoubles];
114 for(
int i=0; i<simdElems; ++i) {
124 const double* smemviews[stk::simd::ndoubles];
126 for(
int i=0; i<simdElems; ++i) {
155 bool copyMEViews =
true)
157 const std::vector<ViewHolder*>& simdFieldViews = simdData.
get_field_views();
158 const ViewHolder* fViews[stk::simd::ndoubles] = {
nullptr};
160 for(
size_t fieldViewsIndex=0; fieldViewsIndex<simdFieldViews.size(); ++fieldViewsIndex) {
161 if (simdFieldViews[fieldViewsIndex] !=
nullptr) {
162 for(
int simdIndex=0; simdIndex<simdElems; ++simdIndex) {
163 fViews[simdIndex] = data[simdIndex]->get_field_views()[fieldViewsIndex];
165 switch(simdFieldViews[fieldViewsIndex]->dim_) {
166 case 1:
interleave_1D(simdFieldViews[fieldViewsIndex], fViews, simdElems);
break;
167 case 2:
interleave_2D(simdFieldViews[fieldViewsIndex], fViews, simdElems);
break;
168 case 3:
interleave_3D(simdFieldViews[fieldViewsIndex], fViews, simdElems);
break;
169 default: ThrowRequireMsg(simdFieldViews[fieldViewsIndex]->dim_ > 0 &&
170 simdFieldViews[fieldViewsIndex]->dim_ < 4,
171 "ERROR, view dim out of range: "<<simdFieldViews[fieldViewsIndex]->dim_);
179 for(
int simdIndex=0; simdIndex<simdElems; ++simdIndex) {
193 int dim = simdrhs.dimension(0);
195 double* r = rhs.data();
196 for(
int i=0; i<dim; ++i) {
197 r[i] = stk::simd::get_data(sr[i], simdIndex);
204 int len = simdlhs.dimension(0)*simdlhs.dimension(1);
206 double* l = lhs.data();
207 for(
int i=0; i<len; ++i) {
208 l[i] = stk::simd::get_data(sl[i], simdIndex);
Definition: ScratchViews.h:40
SharedMemView< T * > scv_volume
Definition: ScratchViews.h:76
bool has_coord_field(const COORDS_TYPES cType) const
Definition: ScratchViews.h:116
Definition: ABLForcingAlgorithm.C:26
SharedMemView< T *** > gijUpper
Definition: ScratchViews.h:77
SharedMemView< T ** > scs_areav
Definition: ScratchViews.h:68
void interleave_me_views(MasterElementViews< DoubleType > &dest, const MasterElementViews< double > &src, int simdIndex)
Definition: CopyAndInterleave.h:134
SharedMemView< T * > det_j
Definition: ScratchViews.h:74
void copy_and_interleave(const std::vector< ScratchViews< double > * > &data, int simdElems, ScratchViews< DoubleType > &simdData, bool copyMEViews=true)
Definition: CopyAndInterleave.h:152
Definition: ElemDataRequests.h:36
const std::vector< ViewHolder * > & get_field_views() const
Definition: ScratchViews.h:122
SharedMemView< T *** > deriv_fem
Definition: ScratchViews.h:73
SharedMemView< T *** > dndx
Definition: ScratchViews.h:69
Definition: ScratchViews.h:33
static constexpr double lhs[8][8]
Definition: UnitTestContinuityAdvElem.C:25
void extract_vector_lane(const SharedMemView< DoubleType * > &simdrhs, int simdIndex, SharedMemView< double * > &rhs)
Definition: CopyAndInterleave.h:191
void interleave_2D(SharedMemView< DTYPE ** > &dview, const SharedMemView< double ** > &sview, int simdIndex)
Definition: CopyAndInterleave.h:37
static constexpr double rhs[8]
Definition: UnitTestContinuityAdvElem.C:18
void interleave_1D(SharedMemView< DTYPE * > &dview, const SharedMemView< double * > &sview, int simdIndex)
Definition: CopyAndInterleave.h:49
Definition: ElemDataRequests.h:35
SharedMemView< T *** > gijLower
Definition: ScratchViews.h:78
SimdDouble DoubleType
Definition: SimdInterface.h:27
MasterElementViews< T > & get_me_views(const COORDS_TYPES cType)
Definition: ScratchViews.h:111
SharedMemView< T *** > dndx_shifted
Definition: ScratchViews.h:70
Kokkos::View< T, Kokkos::LayoutRight, DeviceShmem, Kokkos::MemoryUnmanaged > SharedMemView
Definition: KokkosInterface.h:25
Definition: ScratchViews.h:27
void interleave_3D(SharedMemView< DTYPE *** > &dview, const SharedMemView< double *** > &sview, int simdIndex)
Definition: CopyAndInterleave.h:21
SharedMemView< T * > det_j_fem
Definition: ScratchViews.h:75
SharedMemView< T *** > dndx_fem
Definition: ScratchViews.h:71
Definition: ScratchViews.h:82
SharedMemView< T *** > deriv
Definition: ScratchViews.h:72