21 inline double mult_uv_r(
double *u,
double *v)
24 u[0] * v[0] - u[1] * v[1]
25 + u[2] * v[2] - u[3] * v[3]
26 + u[4] * v[4] - u[5] * v[5];
30 inline double mult_uv_i(
double *u,
double *v)
33 u[0] * v[1] + u[1] * v[0]
34 + u[2] * v[3] + u[3] * v[2]
35 + u[4] * v[5] + u[5] * v[4];
39 inline double mult_udagv_r(
double *u,
double *v)
42 u[0] * v[0] + u[1] * v[1]
43 + u[6] * v[2] + u[7] * v[3]
44 + u[12] * v[4] + u[13] * v[5];
48 inline double mult_udagv_i(
double *u,
double *v)
51 u[0] * v[1] - u[1] * v[0]
52 + u[6] * v[3] - u[7] * v[2]
53 + u[12] * v[5] - u[13] * v[4];
63 for (
int mu = 0; mu <
m_Ndim; ++mu) {
69 assert(bc.size() ==
m_Ndim);
75 for (
int mu = 0; mu <
m_Ndim; ++mu) {
88 m_boundary.resize(m_Ndim);
94 m_GM.resize(m_Ndim + 1);
108 if (m_repr ==
"Dirac") {
113 }
else if (m_repr ==
"Chiral") {
135 }
else if (m_mode ==
"Ddag") {
138 }
else if (m_mode ==
"DdagD") {
141 }
else if (m_mode ==
"H") {
192 mult_tp_chiral(w, f);
193 mult_tm_chiral(w, f);
205 }
else if (mu == 1) {
207 }
else if (mu == 2) {
209 }
else if (mu == 3) {
210 (this->*m_mult_tp)(w, f);
223 }
else if (mu == 1) {
225 }
else if (mu == 2) {
227 }
else if (mu == 3) {
228 (this->*m_mult_tm)(w, f);
245 v1 =
const_cast<Field *
>(&f)->ptr(0);
253 for (
int site = 0; site < m_Nvol; ++site) {
254 for (
int icc = 0; icc < Nvc; icc++) {
255 int in = Nvc * Nd * site;
256 v2[icc + id1 + in] = v1[icc + id3 + in];
257 v2[icc + id2 + in] = v1[icc + id4 + in];
258 v2[icc + id3 + in] = v1[icc + id1 + in];
259 v2[icc + id4 + in] = v1[icc + id2 + in];
274 v1 =
const_cast<Field *
>(&f)->ptr(0);
282 for (
int site = 0; site < m_Nvol; ++site) {
283 for (
int icc = 0; icc < Nvc; icc++) {
284 int in = Nvc * Nd * site;
285 v2[icc + id1 + in] = v1[icc + id1 + in];
286 v2[icc + id2 + in] = v1[icc + id2 + in];
287 v2[icc + id3 + in] = -v1[icc + id3 + in];
288 v2[icc + id4 + in] = -v1[icc + id4 + in];
302 mult_xp(vt, (
Field)w);
303 }
else if (mu == 1) {
304 mult_yp(vt, (
Field)w);
305 }
else if (mu == 2) {
306 mult_zp(vt, (
Field)w);
307 }
else if (mu == 3) {
308 if (m_repr ==
"Dirac") {
309 mult_tp_dirac(vt, w);
311 mult_tp_chiral(vt, w);
331 int Ndf = 2 * Ncol * Ncol;
337 int Nst = Nx * Ny * Nz * Nt;
344 v1 =
const_cast<Field *
>(&f)->ptr(0);
345 u =
const_cast<Field_G *
>(m_U)->ptr(0);
356 double vt1[Nvc], vt2[Nvc];
357 double wt1r, wt1i, wt2r, wt2i;
361 double vcp1[Nvc * 2 * Ny * Nz * Nt], vcp2[Nvc * 2 * Ny * Nz * Nt];
366 for (
int iyzt = 0; iyzt < (Ny * Nz * Nt); iyzt++) {
367 int in = Nvc * ND * (nn + iyzt * Nx);
368 int ix1 = Nvc * 2 * iyzt;
371 for (
int ic = 0; ic < Ncol; ic++) {
372 vcp1[2 * ic + ix1] = bc2 * (v1[2 * ic + id1 + in] - v1[2 * ic + 1 + id4 + in]);
373 vcp1[2 * ic + 1 + ix1] = bc2 * (v1[2 * ic + 1 + id1 + in] + v1[2 * ic + id4 + in]);
374 vcp1[2 * ic + ix2] = bc2 * (v1[2 * ic + id2 + in] - v1[2 * ic + 1 + id3 + in]);
375 vcp1[2 * ic + 1 + ix2] = bc2 * (v1[2 * ic + 1 + id2 + in] + v1[2 * ic + id3 + in]);
383 for (
int iyzt = 0; iyzt < (Ny * Nz * Nt); iyzt++) {
384 int iv = Nvc * ND * (ix + iyzt * Nx);
385 int ig = Ndf * (ix + iyzt * Nx + idir * Nst);
386 int ix1 = Nvc * 2 * iyzt;
389 for (
int ic = 0; ic < Ncol; ic++) {
392 wt1r = mult_uv_r(&u[ic2 + ig], &vcp2[ix1]);
393 wt1i = mult_uv_i(&u[ic2 + ig], &vcp2[ix1]);
394 wt2r = mult_uv_r(&u[ic2 + ig], &vcp2[ix2]);
395 wt2i = mult_uv_i(&u[ic2 + ig], &vcp2[ix2]);
397 v2[2 * ic + id1 + iv] = wt1r;
398 v2[2 * ic + 1 + id1 + iv] = wt1i;
399 v2[2 * ic + id2 + iv] = wt2r;
400 v2[2 * ic + 1 + id2 + iv] = wt2i;
401 v2[2 * ic + id3 + iv] = wt2i;
402 v2[2 * ic + 1 + id3 + iv] = -wt2r;
403 v2[2 * ic + id4 + iv] = wt1i;
404 v2[2 * ic + 1 + id4 + iv] = -wt1r;
409 for (
int iyzt = 0; iyzt < (Ny * Nz * Nt); iyzt++) {
410 for (
int ix = 0; ix < (Nx - 1); ix++) {
413 int iv = Nvc * ND * (ix + iyzt * Nx);
414 int in = Nvc * ND * (nn + iyzt * Nx);
415 int ig = Ndf * (ix + iyzt * Nx + idir * Nst);
417 for (
int ic = 0; ic < Ncol; ic++) {
418 vt1[2 * ic] = v1[2 * ic + id1 + in] - v1[2 * ic + 1 + id4 + in];
419 vt1[2 * ic + 1] = v1[2 * ic + 1 + id1 + in] + v1[2 * ic + id4 + in];
420 vt2[2 * ic] = v1[2 * ic + id2 + in] - v1[2 * ic + 1 + id3 + in];
421 vt2[2 * ic + 1] = v1[2 * ic + 1 + id2 + in] + v1[2 * ic + id3 + in];
424 for (
int ic = 0; ic < Ncol; ic++) {
427 wt1r = mult_uv_r(&u[ic2 + ig], vt1);
428 wt1i = mult_uv_i(&u[ic2 + ig], vt1);
429 wt2r = mult_uv_r(&u[ic2 + ig], vt2);
430 wt2i = mult_uv_i(&u[ic2 + ig], vt2);
432 v2[2 * ic + id1 + iv] = wt1r;
433 v2[2 * ic + 1 + id1 + iv] = wt1i;
434 v2[2 * ic + id2 + iv] = wt2r;
435 v2[2 * ic + 1 + id2 + iv] = wt2i;
436 v2[2 * ic + id3 + iv] = wt2i;
437 v2[2 * ic + 1 + id3 + iv] = -wt2r;
438 v2[2 * ic + id4 + iv] = wt1i;
439 v2[2 * ic + 1 + id4 + iv] = -wt1r;
451 int Ndf = 2 * Ncol * Ncol;
457 int Nst = Nx * Ny * Nz * Nt;
464 v1 =
const_cast<Field *
>(&f)->ptr(0);
465 u =
const_cast<Field_G *
>(m_U)->ptr(0);
476 double vt1[Nvc], vt2[Nvc];
477 double wt1r, wt1i, wt2r, wt2i;
481 double vcp1[Nvc * 2 * Ny * Nz * Nt], vcp2[Nvc * 2 * Ny * Nz * Nt];
486 for (
int iyzt = 0; iyzt < (Ny * Nz * Nt); iyzt++) {
487 int in = Nvc * ND * (nn + iyzt * Nx);
488 int ig = Ndf * (nn + iyzt * Nx + idir * Nst);
489 int ix1 = Nvc * 2 * iyzt;
492 for (
int ic = 0; ic < Ncol; ic++) {
493 vt1[2 * ic] = v1[2 * ic + id1 + in] + v1[2 * ic + 1 + id4 + in];
494 vt1[2 * ic + 1] = v1[2 * ic + 1 + id1 + in] - v1[2 * ic + id4 + in];
496 vt2[2 * ic] = v1[2 * ic + id2 + in] + v1[2 * ic + 1 + id3 + in];
497 vt2[2 * ic + 1] = v1[2 * ic + 1 + id2 + in] - v1[2 * ic + id3 + in];
500 for (
int ic = 0; ic < Ncol; ic++) {
502 vcp1[icr + ix1] = mult_udagv_r(&u[icr + ig], vt1);
503 vcp1[icr + 1 + ix1] = mult_udagv_i(&u[icr + ig], vt1);
504 vcp1[icr + ix2] = mult_udagv_r(&u[icr + ig], vt2);
505 vcp1[icr + 1 + ix2] = mult_udagv_i(&u[icr + ig], vt2);
513 for (
int iyzt = 0; iyzt < (Ny * Nz * Nt); iyzt++) {
514 int iv = Nvc * ND * (ix + iyzt * Nx);
515 int ix1 = Nvc * 2 * iyzt;
518 for (
int ic = 0; ic < Ncol; ic++) {
520 int ici = 2 * ic + 1;
521 v2[icr + id1 + iv] += bc2 * vcp2[icr + ix1];
522 v2[ici + id1 + iv] += bc2 * vcp2[ici + ix1];
523 v2[icr + id2 + iv] += bc2 * vcp2[icr + ix2];
524 v2[ici + id2 + iv] += bc2 * vcp2[ici + ix2];
525 v2[icr + id3 + iv] += -bc2 * vcp2[ici + ix2];
526 v2[ici + id3 + iv] += +bc2 * vcp2[icr + ix2];
527 v2[icr + id4 + iv] += -bc2 * vcp2[ici + ix1];
528 v2[ici + id4 + iv] += +bc2 * vcp2[icr + ix1];
533 for (
int iyzt = 0; iyzt < Ny * Nz * Nt; iyzt++) {
534 for (
int ix = 1; ix < Nx; ix++) {
537 int iv = Nvc * ND * (ix + (iyzt) * Nx);
538 int in = Nvc * ND * (nn + (iyzt) * Nx);
539 int ig = Ndf * (nn + iyzt * Nx + idir * Nst);
541 for (
int ic = 0; ic < Ncol; ic++) {
542 vt1[2 * ic] = v1[2 * ic + id1 + in] + v1[2 * ic + 1 + id4 + in];
543 vt1[2 * ic + 1] = v1[2 * ic + 1 + id1 + in] - v1[2 * ic + id4 + in];
545 vt2[2 * ic] = v1[2 * ic + id2 + in] + v1[2 * ic + 1 + id3 + in];
546 vt2[2 * ic + 1] = v1[2 * ic + 1 + id2 + in] - v1[2 * ic + id3 + in];
549 for (
int ic = 0; ic < Ncol; ic++) {
551 int ici = 2 * ic + 1;
556 wt1r = mult_udagv_r(&u[icr + ig], vt1);
557 wt1i = mult_udagv_i(&u[icr + ig], vt1);
558 wt2r = mult_udagv_r(&u[icr + ig], vt2);
559 wt2i = mult_udagv_i(&u[icr + ig], vt2);
561 v2[icr + id1 + iv] += wt1r;
562 v2[ici + id1 + iv] += wt1i;
563 v2[icr + id2 + iv] += wt2r;
564 v2[ici + id2 + iv] += wt2i;
565 v2[icr + id3 + iv] += -wt2i;
566 v2[ici + id3 + iv] += +wt2r;
567 v2[icr + id4 + iv] += -wt1i;
568 v2[ici + id4 + iv] += +wt1r;
580 int Ndf = 2 * Ncol * Ncol;
586 int Nst = Nx * Ny * Nz * Nt;
593 v1 =
const_cast<Field *
>(&f)->ptr(0);
594 u =
const_cast<Field_G *
>(m_U)->ptr(0);
603 double vt1[Nvc], vt2[Nvc];
604 double wt1r, wt1i, wt2r, wt2i;
609 double vcp1[Nvc * 2 * Nx * Nz * Nt], vcp2[Nvc * 2 * Nx * Nz * Nt];
614 for (
int izt = 0; izt < (Nz * Nt); izt++) {
615 for (
int ix = 0; ix < Nx; ix++) {
616 int in = Nvc * ND * (ix + nn * Nx + izt * Nx * Ny);
617 int ix1 = Nvc * 2 * (ix + izt * Nx);
620 for (
int ic = 0; ic < Ncol; ic++) {
621 vcp1[2 * ic + ix1] = bc2 * (v1[2 * ic + id1 + in] + v1[2 * ic + id4 + in]);
622 vcp1[2 * ic + 1 + ix1] = bc2 * (v1[2 * ic + 1 + id1 + in] + v1[2 * ic + 1 + id4 + in]);
623 vcp1[2 * ic + ix2] = bc2 * (v1[2 * ic + id2 + in] - v1[2 * ic + id3 + in]);
624 vcp1[2 * ic + 1 + ix2] = bc2 * (v1[2 * ic + 1 + id2 + in] - v1[2 * ic + 1 + id3 + in]);
633 for (
int izt = 0; izt < (Nz * Nt); izt++) {
634 for (
int ix = 0; ix < Nx; ix++) {
635 int iv = Nvc * ND * (ix + iy * Nx + izt * Nx * Ny);
636 int ig = Ndf * (ix + iy * Nx + izt * Nx * Ny + idir * Nst);
637 int ix1 = Nvc * 2 * (ix + izt * Nx);
640 for (
int ic = 0; ic < Ncol; ic++) {
643 wt1r = mult_uv_r(&u[ic2 + ig], &vcp2[ix1]);
644 wt1i = mult_uv_i(&u[ic2 + ig], &vcp2[ix1]);
645 wt2r = mult_uv_r(&u[ic2 + ig], &vcp2[ix2]);
646 wt2i = mult_uv_i(&u[ic2 + ig], &vcp2[ix2]);
648 v2[2 * ic + id1 + iv] += wt1r;
649 v2[2 * ic + 1 + id1 + iv] += wt1i;
650 v2[2 * ic + id2 + iv] += wt2r;
651 v2[2 * ic + 1 + id2 + iv] += wt2i;
652 v2[2 * ic + id3 + iv] += -wt2r;
653 v2[2 * ic + 1 + id3 + iv] += -wt2i;
654 v2[2 * ic + id4 + iv] += wt1r;
655 v2[2 * ic + 1 + id4 + iv] += wt1i;
661 for (
int izt = 0; izt < (Nz * Nt); izt++) {
662 for (
int iy = 0; iy < (Ny - 1); iy++) {
664 for (
int ix = 0; ix < Nx; ix++) {
665 int iv = Nvc * ND * (ix + iy * Nx + izt * Nx * Ny);
666 int in = Nvc * ND * (ix + nn * Nx + izt * Nx * Ny);
667 int ig = Ndf * (ix + iy * Nx + izt * Nx * Ny + idir * Nst);
669 for (
int ic = 0; ic < Ncol; ic++) {
670 vt1[2 * ic] = v1[2 * ic + id1 + in] + v1[2 * ic + id4 + in];
671 vt1[2 * ic + 1] = v1[2 * ic + 1 + id1 + in] + v1[2 * ic + 1 + id4 + in];
672 vt2[2 * ic] = v1[2 * ic + id2 + in] - v1[2 * ic + id3 + in];
673 vt2[2 * ic + 1] = v1[2 * ic + 1 + id2 + in] - v1[2 * ic + 1 + id3 + in];
676 for (
int ic = 0; ic < Ncol; ic++) {
679 wt1r = mult_uv_r(&u[ic2 + ig], vt1);
680 wt1i = mult_uv_i(&u[ic2 + ig], vt1);
681 wt2r = mult_uv_r(&u[ic2 + ig], vt2);
682 wt2i = mult_uv_i(&u[ic2 + ig], vt2);
684 v2[2 * ic + id1 + iv] += wt1r;
685 v2[2 * ic + 1 + id1 + iv] += wt1i;
686 v2[2 * ic + id2 + iv] += wt2r;
687 v2[2 * ic + 1 + id2 + iv] += wt2i;
688 v2[2 * ic + id3 + iv] += -wt2r;
689 v2[2 * ic + 1 + id3 + iv] += -wt2i;
690 v2[2 * ic + id4 + iv] += wt1r;
691 v2[2 * ic + 1 + id4 + iv] += wt1i;
704 int Ndf = 2 * Ncol * Ncol;
710 int Nst = Nx * Ny * Nz * Nt;
717 v1 =
const_cast<Field *
>(&f)->ptr(0);
718 u =
const_cast<Field_G *
>(m_U)->ptr(0);
727 double vt1[Nvc], vt2[Nvc];
728 double wt1r, wt1i, wt2r, wt2i;
733 double vcp1[Nvc * 2 * Nx * Nz * Nt], vcp2[Nvc * 2 * Nx * Nz * Nt];
738 for (
int izt = 0; izt < (Nz * Nt); izt++) {
739 for (
int ix = 0; ix < Nx; ix++) {
740 int in = Nvc * ND * (ix + nn * Nx + izt * Nx * Ny);
741 int ig = Ndf * (ix + nn * Nx + izt * Nx * Ny + idir * Nst);
742 int ix1 = Nvc * 2 * (ix + izt * Nx);
745 for (
int ic = 0; ic < Ncol; ic++) {
746 vt1[2 * ic] = v1[2 * ic + id1 + in] - v1[2 * ic + id4 + in];
747 vt1[2 * ic + 1] = v1[2 * ic + 1 + id1 + in] - v1[2 * ic + 1 + id4 + in];
749 vt2[2 * ic] = v1[2 * ic + id2 + in] + v1[2 * ic + id3 + in];
750 vt2[2 * ic + 1] = v1[2 * ic + 1 + id2 + in] + v1[2 * ic + 1 + id3 + in];
753 for (
int ic = 0; ic < Ncol; ic++) {
755 int ici = 2 * ic + 1;
756 vcp1[icr + ix1] = mult_udagv_r(&u[icr + ig], vt1);
757 vcp1[ici + ix1] = mult_udagv_i(&u[icr + ig], vt1);
758 vcp1[icr + ix2] = mult_udagv_r(&u[icr + ig], vt2);
759 vcp1[ici + ix2] = mult_udagv_i(&u[icr + ig], vt2);
768 for (
int izt = 0; izt < (Nz * Nt); izt++) {
769 for (
int ix = 0; ix < Nx; ix++) {
770 int iv = Nvc * ND * (ix + iy * Nx + izt * Nx * Ny);
771 int ix1 = Nvc * 2 * (ix + izt * Nx);
774 for (
int ic = 0; ic < Ncol; ic++) {
776 int ici = 2 * ic + 1;
777 v2[icr + id1 + iv] += bc2 * vcp2[icr + ix1];
778 v2[ici + id1 + iv] += bc2 * vcp2[ici + ix1];
779 v2[icr + id2 + iv] += bc2 * vcp2[icr + ix2];
780 v2[ici + id2 + iv] += bc2 * vcp2[ici + ix2];
781 v2[icr + id3 + iv] += bc2 * vcp2[icr + ix2];
782 v2[ici + id3 + iv] += bc2 * vcp2[ici + ix2];
783 v2[icr + id4 + iv] += -bc2 * vcp2[icr + ix1];
784 v2[ici + id4 + iv] += -bc2 * vcp2[ici + ix1];
790 for (
int izt = 0; izt < (Nz * Nt); izt++) {
791 for (
int iy = 1; iy < Ny; iy++) {
793 for (
int ix = 0; ix < Nx; ix++) {
794 int iv = Nvc * ND * (ix + iy * Nx + izt * Nx * Ny);
795 int in = Nvc * ND * (ix + nn * Nx + izt * Nx * Ny);
796 int ig = Ndf * (ix + nn * Nx + izt * Nx * Ny + idir * Nst);
798 for (
int ic = 0; ic < Ncol; ic++) {
799 vt1[2 * ic] = v1[2 * ic + id1 + in] - v1[2 * ic + id4 + in];
800 vt1[2 * ic + 1] = v1[2 * ic + 1 + id1 + in] - v1[2 * ic + 1 + id4 + in];
802 vt2[2 * ic] = v1[2 * ic + id2 + in] + v1[2 * ic + id3 + in];
803 vt2[2 * ic + 1] = v1[2 * ic + 1 + id2 + in] + v1[2 * ic + 1 + id3 + in];
806 for (
int ic = 0; ic < Ncol; ic++) {
808 int ici = 2 * ic + 1;
813 wt1r = mult_udagv_r(&u[icr + ig], vt1);
814 wt1i = mult_udagv_i(&u[icr + ig], vt1);
815 wt2r = mult_udagv_r(&u[icr + ig], vt2);
816 wt2i = mult_udagv_i(&u[icr + ig], vt2);
818 v2[icr + id1 + iv] += wt1r;
819 v2[ici + id1 + iv] += wt1i;
820 v2[icr + id2 + iv] += wt2r;
821 v2[ici + id2 + iv] += wt2i;
822 v2[icr + id3 + iv] += wt2r;
823 v2[ici + id3 + iv] += wt2i;
824 v2[icr + id4 + iv] += -wt1r;
825 v2[ici + id4 + iv] += -wt1i;
838 int Ndf = 2 * Ncol * Ncol;
844 int Nst = Nx * Ny * Nz * Nt;
851 v1 =
const_cast<Field *
>(&f)->ptr(0);
852 u =
const_cast<Field_G *
>(m_U)->ptr(0);
861 double vt1[Nvc], vt2[Nvc];
862 double wt1r, wt1i, wt2r, wt2i;
867 double vcp1[Nvc * 2 * Nx * Ny * Nt], vcp2[Nvc * 2 * Nx * Ny * Nt];
872 for (
int it = 0; it < Nt; it++) {
873 for (
int ixy = 0; ixy < (Nx * Ny); ixy++) {
874 int in = Nvc * ND * (ixy + nn * Nx * Ny + it * Nx * Ny * Nz);
875 int ix1 = Nvc * 2 * (ixy + it * Nx * Ny);
878 for (
int ic = 0; ic < Ncol; ic++) {
879 vcp1[2 * ic + ix1] = bc2 * (v1[2 * ic + id1 + in] - v1[2 * ic + 1 + id3 + in]);
880 vcp1[2 * ic + 1 + ix1] = bc2 * (v1[2 * ic + 1 + id1 + in] + v1[2 * ic + id3 + in]);
881 vcp1[2 * ic + ix2] = bc2 * (v1[2 * ic + id2 + in] + v1[2 * ic + 1 + id4 + in]);
882 vcp1[2 * ic + 1 + ix2] = bc2 * (v1[2 * ic + 1 + id2 + in] - v1[2 * ic + id4 + in]);
891 for (
int it = 0; it < Nt; it++) {
892 for (
int ixy = 0; ixy < (Nx * Ny); ixy++) {
893 int iv = Nvc * ND * (ixy + iz * Nx * Ny + it * Nx * Ny * Nz);
894 int ig = Ndf * (ixy + iz * Nx * Ny + it * Nx * Ny * Nz + idir * Nst);
895 int ix1 = Nvc * 2 * (ixy + it * Nx * Ny);
898 for (
int ic = 0; ic < Ncol; ic++) {
901 wt1r = mult_uv_r(&u[ic2 + ig], &vcp2[ix1]);
902 wt1i = mult_uv_i(&u[ic2 + ig], &vcp2[ix1]);
903 wt2r = mult_uv_r(&u[ic2 + ig], &vcp2[ix2]);
904 wt2i = mult_uv_i(&u[ic2 + ig], &vcp2[ix2]);
906 v2[2 * ic + id1 + iv] += wt1r;
907 v2[2 * ic + 1 + id1 + iv] += wt1i;
908 v2[2 * ic + id2 + iv] += wt2r;
909 v2[2 * ic + 1 + id2 + iv] += wt2i;
910 v2[2 * ic + id3 + iv] += wt1i;
911 v2[2 * ic + 1 + id3 + iv] += -wt1r;
912 v2[2 * ic + id4 + iv] += -wt2i;
913 v2[2 * ic + 1 + id4 + iv] += wt2r;
919 for (
int it = 0; it < Nt; it++) {
920 for (
int iz = 0; iz < (Nz - 1); iz++) {
922 for (
int ixy = 0; ixy < (Nx * Ny); ixy++) {
923 int iv = Nvc * ND * (ixy + iz * Nx * Ny + it * Nx * Ny * Nz);
924 int in = Nvc * ND * (ixy + nn * Nx * Ny + it * Nx * Ny * Nz);
925 int ig = Ndf * (ixy + iz * Nx * Ny + it * Nx * Ny * Nz + idir * Nst);
927 for (
int ic = 0; ic < Ncol; ic++) {
928 vt1[2 * ic] = v1[2 * ic + id1 + in] - v1[2 * ic + 1 + id3 + in];
929 vt1[2 * ic + 1] = v1[2 * ic + 1 + id1 + in] + v1[2 * ic + id3 + in];
930 vt2[2 * ic] = v1[2 * ic + id2 + in] + v1[2 * ic + 1 + id4 + in];
931 vt2[2 * ic + 1] = v1[2 * ic + 1 + id2 + in] - v1[2 * ic + id4 + in];
934 for (
int ic = 0; ic < Ncol; ic++) {
937 wt1r = mult_uv_r(&u[ic2 + ig], vt1);
938 wt1i = mult_uv_i(&u[ic2 + ig], vt1);
939 wt2r = mult_uv_r(&u[ic2 + ig], vt2);
940 wt2i = mult_uv_i(&u[ic2 + ig], vt2);
942 v2[2 * ic + id1 + iv] += wt1r;
943 v2[2 * ic + 1 + id1 + iv] += wt1i;
944 v2[2 * ic + id2 + iv] += wt2r;
945 v2[2 * ic + 1 + id2 + iv] += wt2i;
946 v2[2 * ic + id3 + iv] += wt1i;
947 v2[2 * ic + 1 + id3 + iv] += -wt1r;
948 v2[2 * ic + id4 + iv] += -wt2i;
949 v2[2 * ic + 1 + id4 + iv] += wt2r;
962 int Ndf = 2 * Ncol * Ncol;
968 int Nst = Nx * Ny * Nz * Nt;
975 v1 =
const_cast<Field *
>(&f)->ptr(0);
976 u =
const_cast<Field_G *
>(m_U)->ptr(0);
985 double vt1[Nvc], vt2[Nvc];
986 double wt1r, wt1i, wt2r, wt2i;
991 double vcp1[Nvc * 2 * Nx * Ny * Nt], vcp2[Nvc * 2 * Nx * Ny * Nt];
996 for (
int it = 0; it < Nt; it++) {
997 for (
int ixy = 0; ixy < (Nx * Ny); ixy++) {
998 int in = Nvc * ND * (ixy + nn * Nx * Ny + it * Nx * Ny * Nz);
999 int ig = Ndf * (ixy + nn * Nx * Ny + it * Nx * Ny * Nz + idir * Nst);
1000 int ix1 = Nvc * 2 * (ixy + it * Nx * Ny);
1001 int ix2 = ix1 + Nvc;
1003 for (
int ic = 0; ic < Ncol; ic++) {
1004 vt1[2 * ic] = v1[2 * ic + id1 + in] + v1[2 * ic + 1 + id3 + in];
1005 vt1[2 * ic + 1] = v1[2 * ic + 1 + id1 + in] - v1[2 * ic + id3 + in];
1006 vt2[2 * ic] = v1[2 * ic + id2 + in] - v1[2 * ic + 1 + id4 + in];
1007 vt2[2 * ic + 1] = v1[2 * ic + 1 + id2 + in] + v1[2 * ic + id4 + in];
1010 for (
int ic = 0; ic < Ncol; ic++) {
1012 int ici = 2 * ic + 1;
1013 vcp1[icr + ix1] = mult_udagv_r(&u[icr + ig], vt1);
1014 vcp1[ici + ix1] = mult_udagv_i(&u[icr + ig], vt1);
1015 vcp1[icr + ix2] = mult_udagv_r(&u[icr + ig], vt2);
1016 vcp1[ici + ix2] = mult_udagv_i(&u[icr + ig], vt2);
1025 for (
int it = 0; it < Nt; it++) {
1026 for (
int ixy = 0; ixy < (Nx * Ny); ixy++) {
1027 int iv = Nvc * ND * (ixy + iz * Nx * Ny + it * Nx * Ny * Nz);
1028 int ix1 = Nvc * 2 * (ixy + it * Nx * Ny);
1029 int ix2 = ix1 + Nvc;
1031 for (
int ic = 0; ic < Ncol; ic++) {
1033 int ici = 2 * ic + 1;
1034 v2[icr + id1 + iv] += bc2 * vcp2[icr + ix1];
1035 v2[ici + id1 + iv] += bc2 * vcp2[ici + ix1];
1036 v2[icr + id2 + iv] += bc2 * vcp2[icr + ix2];
1037 v2[ici + id2 + iv] += bc2 * vcp2[ici + ix2];
1038 v2[icr + id3 + iv] += -bc2 * vcp2[ici + ix1];
1039 v2[ici + id3 + iv] += bc2 * vcp2[icr + ix1];
1040 v2[icr + id4 + iv] += bc2 * vcp2[ici + ix2];
1041 v2[ici + id4 + iv] += -bc2 * vcp2[icr + ix2];
1047 for (
int it = 0; it < Nt; it++) {
1048 for (
int iz = 1; iz < Nz; iz++) {
1050 for (
int ixy = 0; ixy < (Nx * Ny); ixy++) {
1051 int iv = Nvc * ND * (ixy + iz * Nx * Ny + it * Nx * Ny * Nz);
1052 int in = Nvc * ND * (ixy + nn * Nx * Ny + it * Nx * Ny * Nz);
1053 int ig = Ndf * (ixy + nn * Nx * Ny + it * Nx * Ny * Nz + idir * Nst);
1055 for (
int ic = 0; ic < Ncol; ic++) {
1056 vt1[2 * ic] = v1[2 * ic + id1 + in] + v1[2 * ic + 1 + id3 + in];
1057 vt1[2 * ic + 1] = v1[2 * ic + 1 + id1 + in] - v1[2 * ic + id3 + in];
1058 vt2[2 * ic] = v1[2 * ic + id2 + in] - v1[2 * ic + 1 + id4 + in];
1059 vt2[2 * ic + 1] = v1[2 * ic + 1 + id2 + in] + v1[2 * ic + id4 + in];
1062 for (
int ic = 0; ic < Ncol; ic++) {
1064 int ici = 2 * ic + 1;
1069 wt1r = mult_udagv_r(&u[icr + ig], vt1);
1070 wt1i = mult_udagv_i(&u[icr + ig], vt1);
1071 wt2r = mult_udagv_r(&u[icr + ig], vt2);
1072 wt2i = mult_udagv_i(&u[icr + ig], vt2);
1074 v2[icr + id1 + iv] += wt1r;
1075 v2[ici + id1 + iv] += wt1i;
1076 v2[icr + id2 + iv] += wt2r;
1077 v2[ici + id2 + iv] += wt2i;
1078 v2[icr + id3 + iv] += -wt1i;
1079 v2[ici + id3 + iv] += wt1r;
1080 v2[icr + id4 + iv] += wt2i;
1081 v2[ici + id4 + iv] += -wt2r;
1094 int Ndf = 2 * Ncol * Ncol;
1100 int Nst = Nx * Ny * Nz * Nt;
1107 v1 =
const_cast<Field *
>(&f)->ptr(0);
1108 u =
const_cast<Field_G *
>(m_U)->ptr(0);
1117 double vt1[Nvc], vt2[Nvc];
1118 double wt1r, wt1i, wt2r, wt2i;
1123 double vcp1[Nvc * 2 * Nx * Ny * Nz], vcp2[Nvc * 2 * Nx * Ny * Nz];
1128 for (
int ixyz = 0; ixyz < (Nx * Ny * Nz); ixyz++) {
1129 int in = Nvc * ND * (ixyz + nn * Nx * Ny * Nz);
1130 int ix1 = Nvc * 2 * ixyz;
1131 int ix2 = ix1 + Nvc;
1133 for (
int ic = 0; ic < Ncol; ic++) {
1134 vcp1[2 * ic + ix1] = 2.0 * bc2 * v1[2 * ic + id3 + in];
1135 vcp1[2 * ic + 1 + ix1] = 2.0 * bc2 * v1[2 * ic + 1 + id3 + in];
1136 vcp1[2 * ic + ix2] = 2.0 * bc2 * v1[2 * ic + id4 + in];
1137 vcp1[2 * ic + 1 + ix2] = 2.0 * bc2 * v1[2 * ic + 1 + id4 + in];
1145 for (
int ixyz = 0; ixyz < (Nx * Ny * Nz); ixyz++) {
1146 int iv = Nvc * ND * (ixyz + it * Nx * Ny * Nz);
1147 int ig = Ndf * (ixyz + it * Nx * Ny * Nz + idir * Nst);
1148 int ix1 = Nvc * 2 * ixyz;
1149 int ix2 = ix1 + Nvc;
1151 for (
int ic = 0; ic < Ncol; ic++) {
1154 wt1r = mult_uv_r(&u[ic2 + ig], &vcp2[ix1]);
1155 wt1i = mult_uv_i(&u[ic2 + ig], &vcp2[ix1]);
1156 wt2r = mult_uv_r(&u[ic2 + ig], &vcp2[ix2]);
1157 wt2i = mult_uv_i(&u[ic2 + ig], &vcp2[ix2]);
1159 v2[2 * ic + id3 + iv] += wt1r;
1160 v2[2 * ic + 1 + id3 + iv] += wt1i;
1161 v2[2 * ic + id4 + iv] += wt2r;
1162 v2[2 * ic + 1 + id4 + iv] += wt2i;
1167 for (
int it = 0; it < (Nt - 1); it++) {
1169 for (
int ixyz = 0; ixyz < (Nx * Ny * Nz); ixyz++) {
1170 int iv = Nvc * ND * (ixyz + it * Nx * Ny * Nz);
1171 int in = Nvc * ND * (ixyz + nn * Nx * Ny * Nz);
1172 int ig = Ndf * (ixyz + it * Nx * Ny * Nz + idir * Nst);
1174 for (
int ic = 0; ic < Ncol; ic++) {
1175 vt1[2 * ic] = 2.0 * v1[2 * ic + id3 + in];
1176 vt1[2 * ic + 1] = 2.0 * v1[2 * ic + 1 + id3 + in];
1177 vt2[2 * ic] = 2.0 * v1[2 * ic + id4 + in];
1178 vt2[2 * ic + 1] = 2.0 * v1[2 * ic + 1 + id4 + in];
1181 for (
int ic = 0; ic < Ncol; ic++) {
1184 wt1r = mult_uv_r(&u[ic2 + ig], vt1);
1185 wt1i = mult_uv_i(&u[ic2 + ig], vt1);
1186 wt2r = mult_uv_r(&u[ic2 + ig], vt2);
1187 wt2i = mult_uv_i(&u[ic2 + ig], vt2);
1189 v2[2 * ic + id3 + iv] += wt1r;
1190 v2[2 * ic + 1 + id3 + iv] += wt1i;
1191 v2[2 * ic + id4 + iv] += wt2r;
1192 v2[2 * ic + 1 + id4 + iv] += wt2i;
1204 int Ndf = 2 * Ncol * Ncol;
1210 int Nst = Nx * Ny * Nz * Nt;
1217 v1 =
const_cast<Field *
>(&f)->ptr(0);
1218 u =
const_cast<Field_G *
>(m_U)->ptr(0);
1227 double vt1[Nvc], vt2[Nvc];
1228 double wt1r, wt1i, wt2r, wt2i;
1233 double vcp1[Nvc * 2 * Nx * Ny * Nz], vcp2[Nvc * 2 * Nx * Ny * Nz];
1238 for (
int ixyz = 0; ixyz < (Nx * Ny * Nz); ixyz++) {
1239 int in = Nvc * ND * (ixyz + nn * Nx * Ny * Nz);
1240 int ix1 = Nvc * 2 * ixyz;
1241 int ix2 = ix1 + Nvc;
1243 for (
int ic = 0; ic < Ncol; ic++) {
1244 vcp1[2 * ic + ix1] = bc2 * (v1[2 * ic + id1 + in] + v1[2 * ic + id3 + in]);
1245 vcp1[2 * ic + 1 + ix1] = bc2 * (v1[2 * ic + 1 + id1 + in] + v1[2 * ic + 1 + id3 + in]);
1246 vcp1[2 * ic + ix2] = bc2 * (v1[2 * ic + id2 + in] + v1[2 * ic + id4 + in]);
1247 vcp1[2 * ic + 1 + ix2] = bc2 * (v1[2 * ic + 1 + id2 + in] + v1[2 * ic + 1 + id4 + in]);
1255 for (
int ixyz = 0; ixyz < (Nx * Ny * Nz); ixyz++) {
1256 int iv = Nvc * ND * (ixyz + it * Nx * Ny * Nz);
1257 int ig = Ndf * (ixyz + it * Nx * Ny * Nz + idir * Nst);
1258 int ix1 = Nvc * 2 * ixyz;
1259 int ix2 = ix1 + Nvc;
1261 for (
int ic = 0; ic < Ncol; ic++) {
1264 wt1r = mult_uv_r(&u[ic2 + ig], &vcp2[ix1]);
1265 wt1i = mult_uv_i(&u[ic2 + ig], &vcp2[ix1]);
1266 wt2r = mult_uv_r(&u[ic2 + ig], &vcp2[ix2]);
1267 wt2i = mult_uv_i(&u[ic2 + ig], &vcp2[ix2]);
1269 v2[2 * ic + id1 + iv] += wt1r;
1270 v2[2 * ic + 1 + id1 + iv] += wt1i;
1271 v2[2 * ic + id2 + iv] += wt2r;
1272 v2[2 * ic + 1 + id2 + iv] += wt2i;
1273 v2[2 * ic + id3 + iv] += wt1r;
1274 v2[2 * ic + 1 + id3 + iv] += wt1i;
1275 v2[2 * ic + id4 + iv] += wt2r;
1276 v2[2 * ic + 1 + id4 + iv] += wt2i;
1281 for (
int it = 0; it < (Nt - 1); it++) {
1283 for (
int ixyz = 0; ixyz < (Nx * Ny * Nz); ixyz++) {
1284 int iv = Nvc * ND * (ixyz + it * Nx * Ny * Nz);
1285 int in = Nvc * ND * (ixyz + nn * Nx * Ny * Nz);
1286 int ig = Ndf * (ixyz + it * Nx * Ny * Nz + idir * Nst);
1288 for (
int ic = 0; ic < Ncol; ic++) {
1289 vt1[2 * ic] = v1[2 * ic + id1 + in] + v1[2 * ic + id3 + in];
1290 vt1[2 * ic + 1] = v1[2 * ic + 1 + id1 + in] + v1[2 * ic + 1 + id3 + in];
1291 vt2[2 * ic] = v1[2 * ic + id2 + in] + v1[2 * ic + id4 + in];
1292 vt2[2 * ic + 1] = v1[2 * ic + 1 + id2 + in] + v1[2 * ic + 1 + id4 + in];
1295 for (
int ic = 0; ic < Ncol; ic++) {
1298 wt1r = mult_uv_r(&u[ic2 + ig], vt1);
1299 wt1i = mult_uv_i(&u[ic2 + ig], vt1);
1300 wt2r = mult_uv_r(&u[ic2 + ig], vt2);
1301 wt2i = mult_uv_i(&u[ic2 + ig], vt2);
1303 v2[2 * ic + id1 + iv] += wt1r;
1304 v2[2 * ic + 1 + id1 + iv] += wt1i;
1305 v2[2 * ic + id2 + iv] += wt2r;
1306 v2[2 * ic + 1 + id2 + iv] += wt2i;
1307 v2[2 * ic + id3 + iv] += wt1r;
1308 v2[2 * ic + 1 + id3 + iv] += wt1i;
1309 v2[2 * ic + id4 + iv] += wt2r;
1310 v2[2 * ic + 1 + id4 + iv] += wt2i;
1322 int Ndf = 2 * Ncol * Ncol;
1328 int Nst = Nx * Ny * Nz * Nt;
1335 v1 =
const_cast<Field *
>(&f)->ptr(0);
1336 u =
const_cast<Field_G *
>(m_U)->ptr(0);
1345 double vt1[Nvc], vt2[Nvc];
1346 double wt1r, wt1i, wt2r, wt2i;
1351 double vcp1[Nvc * 2 * Nx * Ny * Nz], vcp2[Nvc * 2 * Nx * Ny * Nz];
1356 for (
int ixyz = 0; ixyz < (Nx * Ny * Nz); ixyz++) {
1357 int in = Nvc * ND * (ixyz + nn * Nx * Ny * Nz);
1358 int ig = Ndf * (ixyz + nn * Nx * Ny * Nz + idir * Nst);
1359 int ix1 = Nvc * 2 * ixyz;
1360 int ix2 = ix1 + Nvc;
1362 for (
int ic = 0; ic < Ncol; ic++) {
1363 vt1[2 * ic] = 2.0 * v1[2 * ic + id1 + in];
1364 vt1[2 * ic + 1] = 2.0 * v1[2 * ic + 1 + id1 + in];
1365 vt2[2 * ic] = 2.0 * v1[2 * ic + id2 + in];
1366 vt2[2 * ic + 1] = 2.0 * v1[2 * ic + 1 + id2 + in];
1369 for (
int ic = 0; ic < Ncol; ic++) {
1371 int ici = 2 * ic + 1;
1372 vcp1[icr + ix1] = mult_udagv_r(&u[icr + ig], vt1);
1373 vcp1[ici + ix1] = mult_udagv_i(&u[icr + ig], vt1);
1374 vcp1[icr + ix2] = mult_udagv_r(&u[icr + ig], vt2);
1375 vcp1[ici + ix2] = mult_udagv_i(&u[icr + ig], vt2);
1383 for (
int ixyz = 0; ixyz < (Nx * Ny * Nz); ixyz++) {
1384 int iv = Nvc * ND * (ixyz + it * Nx * Ny * Nz);
1385 int ix1 = Nvc * 2 * ixyz;
1386 int ix2 = ix1 + Nvc;
1388 for (
int ic = 0; ic < Ncol; ic++) {
1390 int ici = 2 * ic + 1;
1391 v2[icr + id1 + iv] += bc2 * vcp2[icr + ix1];
1392 v2[ici + id1 + iv] += bc2 * vcp2[ici + ix1];
1393 v2[icr + id2 + iv] += bc2 * vcp2[icr + ix2];
1394 v2[ici + id2 + iv] += bc2 * vcp2[ici + ix2];
1399 for (
int it = 1; it < Nt; it++) {
1401 for (
int ixyz = 0; ixyz < (Nx * Ny * Nz); ixyz++) {
1402 int iv = Nvc * ND * (ixyz + it * Nx * Ny * Nz);
1403 int in = Nvc * ND * (ixyz + nn * Nx * Ny * Nz);
1404 int ig = Ndf * (ixyz + nn * Nx * Ny * Nz + idir * Nst);
1406 for (
int ic = 0; ic < Ncol; ic++) {
1407 vt1[2 * ic] = 2.0 * v1[2 * ic + id1 + in];
1408 vt1[2 * ic + 1] = 2.0 * v1[2 * ic + 1 + id1 + in];
1409 vt2[2 * ic] = 2.0 * v1[2 * ic + id2 + in];
1410 vt2[2 * ic + 1] = 2.0 * v1[2 * ic + 1 + id2 + in];
1413 for (
int ic = 0; ic < Ncol; ic++) {
1415 int ici = 2 * ic + 1;
1420 wt1r = mult_udagv_r(&u[icr + ig], vt1);
1421 wt1i = mult_udagv_i(&u[icr + ig], vt1);
1422 wt2r = mult_udagv_r(&u[icr + ig], vt2);
1423 wt2i = mult_udagv_i(&u[icr + ig], vt2);
1425 v2[icr + id1 + iv] += wt1r;
1426 v2[ici + id1 + iv] += wt1i;
1427 v2[icr + id2 + iv] += wt2r;
1428 v2[ici + id2 + iv] += wt2i;
1440 int Ndf = 2 * Ncol * Ncol;
1446 int Nst = Nx * Ny * Nz * Nt;
1453 v1 =
const_cast<Field *
>(&f)->ptr(0);
1454 u =
const_cast<Field_G *
>(m_U)->ptr(0);
1463 double vt1[Nvc], vt2[Nvc];
1464 double wt1r, wt1i, wt2r, wt2i;
1469 double vcp1[Nvc * 2 * Nx * Ny * Nz], vcp2[Nvc * 2 * Nx * Ny * Nz];
1474 for (
int ixyz = 0; ixyz < (Nx * Ny * Nz); ixyz++) {
1475 int in = Nvc * ND * (ixyz + nn * Nx * Ny * Nz);
1476 int ig = Ndf * (ixyz + nn * Nx * Ny * Nz + idir * Nst);
1477 int ix1 = Nvc * 2 * ixyz;
1478 int ix2 = ix1 + Nvc;
1480 for (
int ic = 0; ic < Ncol; ic++) {
1481 vt1[2 * ic] = v1[2 * ic + id1 + in] - v1[2 * ic + id3 + in];
1482 vt1[2 * ic + 1] = v1[2 * ic + 1 + id1 + in] - v1[2 * ic + 1 + id3 + in];
1483 vt2[2 * ic] = v1[2 * ic + id2 + in] - v1[2 * ic + id4 + in];
1484 vt2[2 * ic + 1] = v1[2 * ic + 1 + id2 + in] - v1[2 * ic + 1 + id4 + in];
1487 for (
int ic = 0; ic < Ncol; ic++) {
1489 int ici = 2 * ic + 1;
1490 vcp1[icr + ix1] = mult_udagv_r(&u[icr + ig], vt1);
1491 vcp1[ici + ix1] = mult_udagv_i(&u[icr + ig], vt1);
1492 vcp1[icr + ix2] = mult_udagv_r(&u[icr + ig], vt2);
1493 vcp1[ici + ix2] = mult_udagv_i(&u[icr + ig], vt2);
1501 for (
int ixyz = 0; ixyz < (Nx * Ny * Nz); ixyz++) {
1502 int iv = Nvc * ND * (ixyz + it * Nx * Ny * Nz);
1503 int ix1 = Nvc * 2 * ixyz;
1504 int ix2 = ix1 + Nvc;
1506 for (
int ic = 0; ic < Ncol; ic++) {
1508 int ici = 2 * ic + 1;
1509 v2[icr + id1 + iv] += bc2 * vcp2[icr + ix1];
1510 v2[ici + id1 + iv] += bc2 * vcp2[ici + ix1];
1511 v2[icr + id2 + iv] += bc2 * vcp2[icr + ix2];
1512 v2[ici + id2 + iv] += bc2 * vcp2[ici + ix2];
1513 v2[icr + id3 + iv] -= bc2 * vcp2[icr + ix1];
1514 v2[ici + id3 + iv] -= bc2 * vcp2[ici + ix1];
1515 v2[icr + id4 + iv] -= bc2 * vcp2[icr + ix2];
1516 v2[ici + id4 + iv] -= bc2 * vcp2[ici + ix2];
1521 for (
int it = 1; it < Nt; it++) {
1523 for (
int ixyz = 0; ixyz < (Nx * Ny * Nz); ixyz++) {
1524 int iv = Nvc * ND * (ixyz + it * Nx * Ny * Nz);
1525 int in = Nvc * ND * (ixyz + nn * Nx * Ny * Nz);
1526 int ig = Ndf * (ixyz + nn * Nx * Ny * Nz + idir * Nst);
1528 for (
int ic = 0; ic < Ncol; ic++) {
1529 vt1[2 * ic] = v1[2 * ic + id1 + in] - v1[2 * ic + id3 + in];
1530 vt1[2 * ic + 1] = v1[2 * ic + 1 + id1 + in] - v1[2 * ic + 1 + id3 + in];
1531 vt2[2 * ic] = v1[2 * ic + id2 + in] - v1[2 * ic + id4 + in];
1532 vt2[2 * ic + 1] = v1[2 * ic + 1 + id2 + in] - v1[2 * ic + 1 + id4 + in];
1535 for (
int ic = 0; ic < Ncol; ic++) {
1537 int ici = 2 * ic + 1;
1542 wt1r = mult_udagv_r(&u[icr + ig], vt1);
1543 wt1i = mult_udagv_i(&u[icr + ig], vt1);
1544 wt2r = mult_udagv_r(&u[icr + ig], vt2);
1545 wt2i = mult_udagv_i(&u[icr + ig], vt2);
1547 v2[icr + id1 + iv] += wt1r;
1548 v2[ici + id1 + iv] += wt1i;
1549 v2[icr + id2 + iv] += wt2r;
1550 v2[ici + id2 + iv] += wt2i;
1551 v2[icr + id3 + iv] -= wt1r;
1552 v2[ici + id3 + iv] -= wt1i;
1553 v2[icr + id4 + iv] -= wt2r;
1554 v2[ici + id4 + iv] -= wt2i;