13 template<
typename REALTYPE>
15 =
"AField<REALTYPE,ACCEL>";
17 template<
typename REALTYPE>
20 template<
typename REALTYPE>
23 template<
typename REALTYPE>
27 template<
typename REALTYPE>
40 m_element_type = cmpl;
42 m_nsize = m_nin * m_nvol * m_nex;
44 m_nvol_pad = ceil_nwp(m_nvol);
45 m_nsize_pad = m_nin * m_nvol_pad * m_nex;
56 #ifndef USE_ACCEL_OPENACC
58 if(m_num_instance == 0){
78 template<
typename REALTYPE>
90 #ifndef USE_ACCEL_OPENACC
92 if(m_num_instance == 0){
105 template<
typename REALTYPE>
112 if(check_size(nin,nvol,nex) && m_element_type == cmpl)
return;
120 std::size_t nsize_pad_prev = m_nsize_pad;
125 m_element_type = cmpl;
127 m_nsize = m_nin * m_nvol * m_nex;
129 m_nvol_pad = ceil_nwp(m_nvol);
130 m_nsize_pad = m_nin * m_nvol_pad * m_nex;
132 if(m_nsize_pad != nsize_pad_prev){
151 template<
typename REALTYPE>
157 set_thread(ith, nth);
167 template<
typename REALTYPE>
173 set_thread(ith, nth);
183 template<
typename REALTYPE>
187 set_thread(ith, nth);
190 int nsize2 = m_nsize_pad/m_nin;
198 template<
typename REALTYPE>
202 set_thread(ith, nth);
213 template<
typename REALTYPE>
217 set_thread(ith, nth);
224 return m_field[index];
229 template<
typename REALTYPE>
234 int ith, nth, is, ns;
235 set_threadtask(ith, nth, is, ns, m_nsize_pad);
237 for (
int i = is; i < ns; ++i) {
246 template<
typename REALTYPE>
249 assert(check_size(w));
251 int size2 = m_nin * m_nvol_pad;
253 int ith, nth, is, ns;
254 set_threadtask(ith, nth, is, ns, m_nvol_pad);
256 for(
int ex = 0; ex < m_nex; ++ex){
257 for(
int ist = is; ist < ns; ++ist){
260 for(
int in = 0; in < m_nin; ++in){
261 int idx2 =
IDX2(m_nin, in, ist) + size2 * ex;
262 m_field[idx2] = REALTYPE(w.
cmp(in, ist, ex));
265 for(
int in = 0; in < m_nin; ++in){
266 int idx2 =
IDX2(m_nin, in, ist) + size2 * ex;
284 template<
typename REALTYPE>
287 assert(check_size(w));
290 set_thread(ith, nth);
293 int nvex = m_nsize_pad/m_nin;
301 template<
typename REALTYPE>
306 assert( nin() == w.
nin());
307 assert(nvol() == w.
nvol());
309 assert(ex_w < w.
nex());
312 set_thread(ith, nth);
315 int size2 = m_nin * m_nvol_pad;
324 template<
typename REALTYPE>
328 assert(check_size(w));
331 set_thread(ith, nth);
334 int nvex = m_nsize_pad/m_nin;
342 template<
typename REALTYPE>
347 assert( nin() == w.
nin());
348 assert(nvol() == w.
nvol());
350 assert(ex_w < w.
nex());
353 set_thread(ith, nth);
356 int size2 = m_nin * m_nvol_pad;
365 template<
typename REALTYPE>
369 assert(check_size(w));
372 set_thread(ith, nth);
375 int nvex = m_nsize_pad/m_nin;
383 template<
typename REALTYPE>
385 const REALTYPE ar,
const REALTYPE ai,
389 assert( nin() == w.
nin());
390 assert(nvol() == w.
nvol());
392 assert(ex_w < w.
nex());
395 set_thread(ith, nth);
398 int size2 = m_nin * m_nvol_pad;
407 template<
typename REALTYPE>
412 assert(check_size(w));
415 set_thread(ith, nth);
418 REALTYPE ar = real(a);
419 REALTYPE ai = imag(a);
420 int nvex = m_nsize_pad/m_nin;
428 template<
typename REALTYPE>
435 assert( nin() == w.
nin());
436 assert(nvol() == w.
nvol());
438 assert(ex_w < w.
nex());
441 set_thread(ith, nth);
444 int size2 = m_nin * m_nvol_pad;
445 REALTYPE ar = real(a);
446 REALTYPE ai = imag(a);
455 template<
typename REALTYPE>
459 assert(check_size(w));
462 set_thread(ith, nth);
465 int nvex = m_nsize_pad/m_nin;
473 template<
typename REALTYPE>
479 assert( nin() == w.
nin());
480 assert(nvol() == w.
nvol());
482 assert(ex_w < w.
nex());
485 set_thread(ith, nth);
488 int size2 = m_nin * m_nvol_pad;
497 template<
typename REALTYPE>
501 assert(check_size(w));
504 set_thread(ith, nth);
507 int nvex = m_nsize_pad/m_nin;
515 template<
typename REALTYPE>
520 assert(check_size(w));
523 set_thread(ith, nth);
526 REALTYPE ar = real(a);
527 REALTYPE ai = imag(a);
528 int nvex = m_nsize_pad/m_nin;
536 template<
typename REALTYPE>
543 assert( nin() == w.
nin());
544 assert(nvol() == w.
nvol());
546 assert(ex_w < w.
nex());
549 set_thread(ith, nth);
552 int size2 = m_nin * m_nvol_pad;
553 REALTYPE ar = real(a);
554 REALTYPE ai = imag(a);
564 template<
typename REALTYPE>
568 set_thread(ith, nth);
571 int nvex = m_nsize_pad/m_nin;
579 template<
typename REALTYPE>
582 int size2 = m_nin * m_nvol_pad;
585 set_thread(ith, nth);
596 template<
typename REALTYPE>
600 REALTYPE ar = real(a);
601 REALTYPE ai = imag(a);
604 set_thread(ith, nth);
607 int nvex = m_nsize_pad/m_nin;
616 template<
typename REALTYPE>
621 int size2 = m_nin * m_nvol_pad;
623 REALTYPE ar = real(a);
624 REALTYPE ai = imag(a);
627 set_thread(ith, nth);
637 template<
typename REALTYPE>
640 assert(check_size(w));
643 set_thread(ith, nth);
648 #ifdef USE_ACCEL_OPENACC
649 int nvex = m_nsize_pad/m_nin;
653 m_red1, m_nin, m_nvol_pad, m_nex);
665 template<
typename REALTYPE>
669 assert(check_size(w));
672 set_thread(ith, nth);
678 #ifdef USE_ACCEL_OPENACC
679 int nvex = m_nvol_pad * m_nex;
683 m_red1, m_red2, m_nin, m_nvol_pad, m_nex);
689 real_t sum[2] = { ar2, ai2 };
697 template<
typename REALTYPE>
701 set_thread(ith, nth);
706 #ifdef USE_ACCEL_OPENACC
707 int nvex = m_nvol_pad * m_nex;
722 template<
typename REALTYPE>
726 set_thread(ith, nth);
731 int nvex = m_nvol_pad * m_nex;
732 for(
int ivex = 0; ivex < nvex; ++ivex){
734 for(
int in = 0; in < m_nin; ++in){
750 template<
typename REALTYPE>
754 vout.
general(
"%s: xI is not relevant opearation\n",
760 set_thread(ith, nth);
763 int nvex = m_nvol_pad * m_nex;
771 template<
typename REALTYPE>
777 set_thread(ith, nth);
780 int nvex = m_nvol_pad * m_nex;