/benchmarks/tensors/dibaryon/reference/qblocks_2pt.c
https://github.com/Tiramisu-Compiler/tiramisu · C · 1533 lines · 1447 code · 42 blank · 44 comment · 264 complexity · 89bec7f30e4698cf7bc6e3ff1caf59a3 MD5 · raw file
Large files are truncated click here to view the full file
- #include <stdio.h>
- #include <stdlib.h>
- #include <complex.h>
- #include <math.h>
- #include <time.h>
- #include <sys/time.h>
- #include "qblocks_2pt.h" /* DEPS */
- #include "tiramisu_wrapper.h"
- /* index functions */
- int index_2d(int a, int b, int length2) {
- return b +length2*( a );
- }
- int index_3d(int a, int b, int c, int length2, int length3) {
- return c +length3*( b +length2*( a ));
- }
- int index_4d(int a, int b, int c, int d, int length2, int length3, int length4) {
- return d +length4*( c +length3*( b +length2*( a )));
- }
- int prop_index(int q, int t, int c1, int s1, int c2, int s2, int y, int x, int Nc, int Ns, int Vsrc, int Vsnk, int Nt) {
- //return x +Vsnk*( y +Vsrc*( s2 +Ns*( c2 +Nc*( s1 +Ns*( c1 +Nc*( t +Nt* q ))))));
- return y +Vsrc*( x +Vsnk*( s1 +Ns*( c1 +Nc*( s2 +Ns*( c2 +Nc*( t +Nt* q ))))));
- }
- int Q_index(int t, int c1, int s1, int c2, int s2, int x1, int c3, int s3, int y, int Nc, int Ns, int Vsrc, int Vsnk) {
- return y +Vsrc*( s3 +Ns*( c3 +Nc*( x1 +Vsnk*( s2 +Ns*( c2 +Nc*( s1 +Ns*( c1 +Nc*( t ))))))));
- }
- int Blocal_index(int t, int c1, int s1, int c2, int s2, int x, int c3, int s3, int m, int Nc, int Ns, int Vsnk, int Nsrc) {
- return m +Nsrc*( s3 +Ns*( c3 +Nc*( x +Vsnk*( s2 +Ns*( c2 +Nc*( s1 +Ns*( c1 +Nc*( t ))))))));
- }
- int Bdouble_index(int t, int c1, int s1, int c2, int s2, int x1, int c3, int s3, int x2, int m, int Nc, int Ns, int Vsnk, int Nsrc) {
- return m +Nsrc*( x2 +Vsnk*( s3 +Ns*( c3 +Nc*( x1 +Vsnk*( s2 +Ns*( c2 +Nc*( s1 +Ns*( c1 +Nc*( t )))))))));
- }
- void error_msg(char *msg)
- {
- printf("\n\033[1;31mError! %s.\033[0m\n", msg);
- exit(1);
- }
- double rtclock()
- {
- struct timeval Tp;
- gettimeofday(&Tp, NULL);
- return (Tp.tv_sec + Tp.tv_usec * 1.0e-6);
- }
- void make_local_block(double* Blocal_re,
- double* Blocal_im,
- const double* prop_re,
- const double* prop_im,
- const int* color_weights,
- const int* spin_weights,
- const double* weights,
- const double* psi_re,
- const double* psi_im,
- const int Nc,
- const int Ns,
- const int Vsrc,
- const int Vsnk,
- const int Nt,
- const int Nw,
- const int Nq,
- const int Nsrc) {
- /* loop indices */
- int iCprime, iSprime, jCprime, jSprime, kCprime, kSprime, iC, iS, jC, jS, kC, kS, x, t, y, wnum, m;
- /* subexpressions */
- double prop_prod_02_re;
- double prop_prod_02_im;
- double prop_prod_re;
- double prop_prod_im;
- /* initialize */
- for (t=0; t<Nt; t++) {
- for (iCprime=0; iCprime<Nc; iCprime++) {
- for (iSprime=0; iSprime<Ns; iSprime++) {
- for (kCprime=0; kCprime<Nc; kCprime++) {
- for (kSprime=0; kSprime<Ns; kSprime++) {
- for (x=0; x<Vsnk; x++) {
- for (jCprime=0; jCprime<Nc; jCprime++) {
- for (jSprime=0; jSprime<Ns; jSprime++) {
- for (m=0; m<Nsrc; m++) {
- Blocal_re[Blocal_index(t,iCprime,iSprime,kCprime,kSprime,x,jCprime,jSprime,m ,Nc,Ns,Vsnk,Nsrc)] = 0.0;
- Blocal_im[Blocal_index(t,iCprime,iSprime,kCprime,kSprime,x,jCprime,jSprime,m ,Nc,Ns,Vsnk,Nsrc)] = 0.0;
- }
- }
- }
- }
- }
- }
- }
- }
- }
- /* build local (no quark exchange) block */
- for (wnum=0; wnum<Nw; wnum++) {
- iC = color_weights[index_2d(wnum,0, Nq)];
- iS = spin_weights[index_2d(wnum,0, Nq)];
- jC = color_weights[index_2d(wnum,1, Nq)];
- jS = spin_weights[index_2d(wnum,1, Nq)];
- kC = color_weights[index_2d(wnum,2, Nq)];
- kS = spin_weights[index_2d(wnum,2, Nq)];
- for (t=0; t<Nt; t++) {
- for (iCprime=0; iCprime<Nc; iCprime++) {
- for (iSprime=0; iSprime<Ns; iSprime++) {
- for (kCprime=0; kCprime<Nc; kCprime++) {
- for (kSprime=0; kSprime<Ns; kSprime++) {
- for (x=0; x<Vsnk; x++) {
- for (y=0; y<Vsrc; y++) {
- prop_prod_02_re = weights[wnum] * ( (prop_re[prop_index(0,t,iC,iS,iCprime,iSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] * prop_re[prop_index(2,t,kC,kS,kCprime,kSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] - prop_im[prop_index(0,t,iC,iS,iCprime,iSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] * prop_im[prop_index(2,t,kC,kS,kCprime,kSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)]) - (prop_re[prop_index(0,t,iC,iS,kCprime,kSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] * prop_re[prop_index(2,t,kC,kS,iCprime,iSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] - prop_im[prop_index(0,t,iC,iS,kCprime,kSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] * prop_im[prop_index(2,t,kC,kS,iCprime,iSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)]) );
- prop_prod_02_im = weights[wnum] * ( (prop_re[prop_index(0,t,iC,iS,iCprime,iSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] * prop_im[prop_index(2,t,kC,kS,kCprime,kSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] + prop_im[prop_index(0,t,iC,iS,iCprime,iSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] * prop_re[prop_index(2,t,kC,kS,kCprime,kSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)]) - (prop_re[prop_index(0,t,iC,iS,kCprime,kSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] * prop_im[prop_index(2,t,kC,kS,iCprime,iSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] + prop_im[prop_index(0,t,iC,iS,kCprime,kSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] * prop_re[prop_index(2,t,kC,kS,iCprime,iSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)]) );
- for (jCprime=0; jCprime<Nc; jCprime++) {
- for (jSprime=0; jSprime<Ns; jSprime++) {
- prop_prod_re = prop_prod_02_re * prop_re[prop_index(1,t,jC,jS,jCprime,jSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] - prop_prod_02_im * prop_im[prop_index(1,t,jC,jS,jCprime,jSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)];
- prop_prod_im = prop_prod_02_re * prop_im[prop_index(1,t,jC,jS,jCprime,jSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] + prop_prod_02_im * prop_re[prop_index(1,t,jC,jS,jCprime,jSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)];
- for (m=0; m<Nsrc; m++) {
- Blocal_re[Blocal_index(t,iCprime,iSprime,kCprime,kSprime,x,jCprime,jSprime,m ,Nc,Ns,Vsnk,Nsrc)] += psi_re[index_2d(y,m ,Nsrc)] * prop_prod_re - psi_im[index_2d(y,m ,Nsrc)] * prop_prod_im;
- Blocal_im[Blocal_index(t,iCprime,iSprime,kCprime,kSprime,x,jCprime,jSprime,m ,Nc,Ns,Vsnk,Nsrc)] += psi_re[index_2d(y,m ,Nsrc)] * prop_prod_im + psi_im[index_2d(y,m ,Nsrc)] * prop_prod_re;
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- void make_local_snk_block(double* Blocal_re,
- double* Blocal_im,
- const double* prop_re,
- const double* prop_im,
- const int* color_weights,
- const int* spin_weights,
- const double* weights,
- const double* psi_re,
- const double* psi_im,
- const int Nc,
- const int Ns,
- const int Vsrc,
- const int Vsnk,
- const int Nt,
- const int Nw,
- const int Nq,
- const int Nsnk) {
- /* loop indices */
- int iCprime, iSprime, jCprime, jSprime, kCprime, kSprime, iC, iS, jC, jS, kC, kS, x, t, y, wnum, n;
- /* subexpressions */
- double prop_prod_02_re;
- double prop_prod_02_im;
- double prop_prod_re;
- double prop_prod_im;
- /* initialize */
- for (t=0; t<Nt; t++) {
- for (iCprime=0; iCprime<Nc; iCprime++) {
- for (iSprime=0; iSprime<Ns; iSprime++) {
- for (kCprime=0; kCprime<Nc; kCprime++) {
- for (kSprime=0; kSprime<Ns; kSprime++) {
- for (y=0; y<Vsrc; y++) {
- for (jCprime=0; jCprime<Nc; jCprime++) {
- for (jSprime=0; jSprime<Ns; jSprime++) {
- for (n=0; n<Nsnk; n++) {
- Blocal_re[Blocal_index(t,iCprime,iSprime,kCprime,kSprime,y,jCprime,jSprime,n ,Nc,Ns,Vsrc,Nsnk)] = 0.0;
- Blocal_im[Blocal_index(t,iCprime,iSprime,kCprime,kSprime,y,jCprime,jSprime,n ,Nc,Ns,Vsrc,Nsnk)] = 0.0;
- }
- }
- }
- }
- }
- }
- }
- }
- }
- /* build local (no quark exchange) block */
- for (wnum=0; wnum<Nw; wnum++) {
- iC = color_weights[index_2d(wnum,0, Nq)];
- iS = spin_weights[index_2d(wnum,0, Nq)];
- jC = color_weights[index_2d(wnum,1, Nq)];
- jS = spin_weights[index_2d(wnum,1, Nq)];
- kC = color_weights[index_2d(wnum,2, Nq)];
- kS = spin_weights[index_2d(wnum,2, Nq)];
- for (t=0; t<Nt; t++) {
- for (iCprime=0; iCprime<Nc; iCprime++) {
- for (iSprime=0; iSprime<Ns; iSprime++) {
- for (kCprime=0; kCprime<Nc; kCprime++) {
- for (kSprime=0; kSprime<Ns; kSprime++) {
- for (y=0; y<Vsrc; y++) {
- for (x=0; x<Vsnk; x++) {
- prop_prod_02_re = weights[wnum] * ( (prop_re[prop_index(0,t,iC,iS,iCprime,iSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] * prop_re[prop_index(2,t,kC,kS,kCprime,kSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] - prop_im[prop_index(0,t,iC,iS,iCprime,iSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] * prop_im[prop_index(2,t,kC,kS,kCprime,kSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)]) - (prop_re[prop_index(0,t,iC,iS,kCprime,kSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] * prop_re[prop_index(2,t,kC,kS,iCprime,iSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] - prop_im[prop_index(0,t,iC,iS,kCprime,kSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] * prop_im[prop_index(2,t,kC,kS,iCprime,iSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)]) );
- prop_prod_02_im = weights[wnum] * ( (prop_re[prop_index(0,t,iC,iS,iCprime,iSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] * prop_im[prop_index(2,t,kC,kS,kCprime,kSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] + prop_im[prop_index(0,t,iC,iS,iCprime,iSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] * prop_re[prop_index(2,t,kC,kS,kCprime,kSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)]) - (prop_re[prop_index(0,t,iC,iS,kCprime,kSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] * prop_im[prop_index(2,t,kC,kS,iCprime,iSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] + prop_im[prop_index(0,t,iC,iS,kCprime,kSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] * prop_re[prop_index(2,t,kC,kS,iCprime,iSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)]) );
- for (jCprime=0; jCprime<Nc; jCprime++) {
- for (jSprime=0; jSprime<Ns; jSprime++) {
- prop_prod_re = prop_prod_02_re * prop_re[prop_index(1,t,jC,jS,jCprime,jSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] - prop_prod_02_im * prop_im[prop_index(1,t,jC,jS,jCprime,jSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)];
- prop_prod_im = prop_prod_02_re * prop_im[prop_index(1,t,jC,jS,jCprime,jSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] + prop_prod_02_im * prop_re[prop_index(1,t,jC,jS,jCprime,jSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)];
- for (n=0; n<Nsnk; n++) {
- Blocal_re[Blocal_index(t,iCprime,iSprime,kCprime,kSprime,y,jCprime,jSprime,n ,Nc,Ns,Vsrc,Nsnk)] += psi_re[index_2d(x,n ,Nsnk)] * prop_prod_re - psi_im[index_2d(x,n ,Nsnk)] * prop_prod_im;
- Blocal_im[Blocal_index(t,iCprime,iSprime,kCprime,kSprime,y,jCprime,jSprime,n ,Nc,Ns,Vsrc,Nsnk)] += psi_re[index_2d(x,n ,Nsnk)] * prop_prod_im + psi_im[index_2d(x,n ,Nsnk)] * prop_prod_re;
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- void make_single_block(double* Bsingle_re,
- double* Bsingle_im,
- const double* prop_re,
- const double* prop_im,
- const int* color_weights,
- const int* spin_weights,
- const double* weights,
- const double* psi_re,
- const double* psi_im,
- const int Nc,
- const int Ns,
- const int Vsrc,
- const int Vsnk,
- const int Nt,
- const int Nw,
- const int Nq,
- const int Nsrc) {
- /* indices */
- int iCprime, iSprime, jCprime, jSprime, kCprime, kSprime, iC, iS, jC, jS, kC, kS, x, x1, x2, t, y, wnum, m;
- /* subexpressions */
- double prop_prod_re;
- double prop_prod_im;
- double* Q02_re = malloc(Nt * Nc * Ns * Nc * Ns * Vsnk * Nc * Ns * Vsrc * sizeof (double));
- double* Q02_im = malloc(Nt * Nc * Ns * Nc * Ns * Vsnk * Nc * Ns * Vsrc * sizeof (double));
- /* initialize */
- for (t=0; t<Nt; t++) {
- for (iCprime=0; iCprime<Nc; iCprime++) {
- for (iSprime=0; iSprime<Ns; iSprime++) {
- for (kCprime=0; kCprime<Nc; kCprime++) {
- for (kSprime=0; kSprime<Ns; kSprime++) {
- for (x1=0; x1<Vsnk; x1++) {
- for (m=0; m<Nsrc; m++) {
- for (jCprime=0; jCprime<Nc; jCprime++) {
- for (jSprime=0; jSprime<Ns; jSprime++) {
- for (x2=0; x2<Vsnk; x2++) {
- Bsingle_re[Bdouble_index(t,iCprime,iSprime,kCprime,kSprime,x1,jCprime,jSprime,x2,m ,Nc,Ns,Vsnk,Nsrc)] = 0.0;
- Bsingle_im[Bdouble_index(t,iCprime,iSprime,kCprime,kSprime,x1,jCprime,jSprime,x2,m ,Nc,Ns,Vsnk,Nsrc)] = 0.0;
- }
- }
- }
- }
- for (jC=0; jC<Nc; jC++) {
- for (jS=0; jS<Ns; jS++) {
- for (y=0; y<Vsrc; y++) {
- Q02_re[Q_index(t,iCprime,iSprime,kCprime,kSprime,x1,jC,jS,y ,Nc,Ns,Vsrc,Vsnk)] = 0.0;
- Q02_im[Q_index(t,iCprime,iSprime,kCprime,kSprime,x1,jC,jS,y ,Nc,Ns,Vsrc,Vsnk)] = 0.0;
- }
- }
- }
- }
- }
- }
- }
- }
- }
- /* build diquarks */
- for (wnum=0; wnum<Nw; wnum++) {
- iC = color_weights[index_2d(wnum,0, Nq)];
- iS = spin_weights[index_2d(wnum,0, Nq)];
- jC = color_weights[index_2d(wnum,1, Nq)];
- jS = spin_weights[index_2d(wnum,1, Nq)];
- kC = color_weights[index_2d(wnum,2, Nq)];
- kS = spin_weights[index_2d(wnum,2, Nq)];
- for (t=0; t<Nt; t++) {
- for (iCprime=0; iCprime<Nc; iCprime++) {
- for (iSprime=0; iSprime<Ns; iSprime++) {
- for (kCprime=0; kCprime<Nc; kCprime++) {
- for (kSprime=0; kSprime<Ns; kSprime++) {
- for (y=0; y<Vsrc; y++) {
- for (x=0; x<Vsnk; x++) {
- Q02_re[Q_index(t,iCprime,iSprime,kCprime,kSprime,x,jC,jS,y ,Nc,Ns,Vsrc,Vsnk)] += weights[wnum] * ( (prop_re[prop_index(0,t,iC,iS,iCprime,iSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] * prop_re[prop_index(2,t,kC,kS,kCprime,kSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] - prop_im[prop_index(0,t,iC,iS,iCprime,iSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] * prop_im[prop_index(2,t,kC,kS,kCprime,kSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)]) - (prop_re[prop_index(0,t,iC,iS,kCprime,kSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] * prop_re[prop_index(2,t,kC,kS,iCprime,iSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] - prop_im[prop_index(0,t,iC,iS,kCprime,kSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] * prop_im[prop_index(2,t,kC,kS,iCprime,iSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)]) );
- Q02_im[Q_index(t,iCprime,iSprime,kCprime,kSprime,x,jC,jS,y ,Nc,Ns,Vsrc,Vsnk)] += weights[wnum] * ( (prop_re[prop_index(0,t,iC,iS,iCprime,iSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] * prop_im[prop_index(2,t,kC,kS,kCprime,kSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] + prop_im[prop_index(0,t,iC,iS,iCprime,iSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] * prop_re[prop_index(2,t,kC,kS,kCprime,kSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)]) - (prop_re[prop_index(0,t,iC,iS,kCprime,kSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] * prop_im[prop_index(2,t,kC,kS,iCprime,iSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] + prop_im[prop_index(0,t,iC,iS,kCprime,kSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] * prop_re[prop_index(2,t,kC,kS,iCprime,iSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)]) );
- }
- }
- }
- }
- }
- }
- }
- }
- /* build q2-exchange block */
- for (t=0; t<Nt; t++) {
- for (iCprime=0; iCprime<Nc; iCprime++) {
- for (iSprime=0; iSprime<Ns; iSprime++) {
- for (kCprime=0; kCprime<Nc; kCprime++) {
- for (kSprime=0; kSprime<Ns; kSprime++) {
- for (x1=0; x1<Vsnk; x1++) {
- for (jC=0; jC<Nc; jC++) {
- for (jS=0; jS<Ns; jS++) {
- for (jCprime=0; jCprime<Nc; jCprime++) {
- for (jSprime=0; jSprime<Ns; jSprime++) {
- for (y=0; y<Vsrc; y++) {
- for (x2=0; x2<Vsnk; x2++) {
- prop_prod_re = Q02_re[Q_index(t,iCprime,iSprime,kCprime,kSprime,x1,jC,jS,y ,Nc,Ns,Vsrc,Vsnk)] * prop_re[prop_index(1,t,jC,jS,jCprime,jSprime,y,x2 ,Nc,Ns,Vsrc,Vsnk,Nt)] - Q02_im[Q_index(t,iCprime,iSprime,kCprime,kSprime,x1,jC,jS,y ,Nc,Ns,Vsrc,Vsnk)] * prop_im[prop_index(1,t,jC,jS,jCprime,jSprime,y,x2 ,Nc,Ns,Vsrc,Vsnk,Nt)];
- prop_prod_im = Q02_re[Q_index(t,iCprime,iSprime,kCprime,kSprime,x1,jC,jS,y ,Nc,Ns,Vsrc,Vsnk)] * prop_im[prop_index(1,t,jC,jS,jCprime,jSprime,y,x2 ,Nc,Ns,Vsrc,Vsnk,Nt)] + Q02_im[Q_index(t,iCprime,iSprime,kCprime,kSprime,x1,jC,jS,y ,Nc,Ns,Vsrc,Vsnk)] * prop_re[prop_index(1,t,jC,jS,jCprime,jSprime,y,x2 ,Nc,Ns,Vsrc,Vsnk,Nt)];
- for (m=0; m<Nsrc; m++) {
- Bsingle_re[Bdouble_index(t,iCprime,iSprime,kCprime,kSprime,x1,jCprime,jSprime,x2,m ,Nc,Ns,Vsnk,Nsrc)] += psi_re[index_2d(y,m ,Nsrc)] * prop_prod_re - psi_im[index_2d(y,m ,Nsrc)] * prop_prod_im;
- Bsingle_im[Bdouble_index(t,iCprime,iSprime,kCprime,kSprime,x1,jCprime,jSprime,x2,m ,Nc,Ns,Vsnk,Nsrc)] += psi_re[index_2d(y,m ,Nsrc)] * prop_prod_im + psi_im[index_2d(y,m ,Nsrc)] * prop_prod_re;
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- free(Q02_re);
- free(Q02_im);
- }
- void make_double_block(double* Bdouble_re,
- double* Bdouble_im,
- const double* prop_re,
- const double* prop_im,
- const int* color_weights,
- const int* spin_weights,
- const double* weights,
- const double* psi_re,
- const double* psi_im,
- const int Nc,
- const int Ns,
- const int Vsrc,
- const int Vsnk,
- const int Nt,
- const int Nw,
- const int Nq,
- const int Nsrc) {
- /* indices */
- int iCprime, iSprime, jCprime, jSprime, kCprime, kSprime, iC, iS, jC, jS, kC, kS, x, x1, x2, t, y, wnum, n;
- /* subexpressions */
- double prop_prod_re;
- double prop_prod_im;
- double* Q12_re = malloc(Nt * Nc * Ns * Nc * Ns * Vsnk * Nc * Ns * Vsrc * sizeof (double));
- double* Q12_im = malloc(Nt * Nc * Ns * Nc * Ns * Vsnk * Nc * Ns * Vsrc * sizeof (double));
- double* Q01_re = malloc(Nt * Nc * Ns * Nc * Ns * Vsnk * Nc * Ns * Vsrc * sizeof (double));
- double* Q01_im = malloc(Nt * Nc * Ns * Nc * Ns * Vsnk * Nc * Ns * Vsrc * sizeof (double));
- /* initialize */
- for (t=0; t<Nt; t++) {
- for (iCprime=0; iCprime<Nc; iCprime++) {
- for (iSprime=0; iSprime<Ns; iSprime++) {
- for (kCprime=0; kCprime<Nc; kCprime++) {
- for (kSprime=0; kSprime<Ns; kSprime++) {
- for (x1=0; x1<Vsnk; x1++) {
- for (n=0; n<Nsrc; n++) {
- for (jCprime=0; jCprime<Nc; jCprime++) {
- for (jSprime=0; jSprime<Ns; jSprime++) {
- for (x2=0; x2<Vsnk; x2++) {
- Bdouble_re[Bdouble_index(t,iCprime,iSprime,kCprime,kSprime,x1,jCprime,jSprime,x2,n ,Nc,Ns,Vsnk,Nsrc)] = 0.0;
- Bdouble_im[Bdouble_index(t,iCprime,iSprime,kCprime,kSprime,x1,jCprime,jSprime,x2,n ,Nc,Ns,Vsnk,Nsrc)] = 0.0;
- }
- }
- }
- }
- for (jC=0; jC<Nc; jC++) {
- for (jS=0; jS<Ns; jS++) {
- for (y=0; y<Vsrc; y++) {
- Q12_re[Q_index(t,iCprime,iSprime,kCprime,kSprime,x1,jC,jS,y ,Nc,Ns,Vsrc,Vsnk)] = 0.0;
- Q12_im[Q_index(t,iCprime,iSprime,kCprime,kSprime,x1,jC,jS,y ,Nc,Ns,Vsrc,Vsnk)] = 0.0;
- Q01_re[Q_index(t,iCprime,iSprime,kCprime,kSprime,x1,jC,jS,y ,Nc,Ns,Vsrc,Vsnk)] = 0.0;
- Q01_im[Q_index(t,iCprime,iSprime,kCprime,kSprime,x1,jC,jS,y ,Nc,Ns,Vsrc,Vsnk)] = 0.0;
- }
- }
- }
- }
- }
- }
- }
- }
- }
- /* build diquarks */
- for (wnum=0; wnum<Nw; wnum++) {
- iC = color_weights[index_2d(wnum,0, Nq)];
- iS = spin_weights[index_2d(wnum,0, Nq)];
- jC = color_weights[index_2d(wnum,1, Nq)];
- jS = spin_weights[index_2d(wnum,1, Nq)];
- kC = color_weights[index_2d(wnum,2, Nq)];
- kS = spin_weights[index_2d(wnum,2, Nq)];
- for (t=0; t<Nt; t++) {
- for (jCprime=0; jCprime<Nc; jCprime++) {
- for (jSprime=0; jSprime<Ns; jSprime++) {
- for (kCprime=0; kCprime<Nc; kCprime++) {
- for (kSprime=0; kSprime<Ns; kSprime++) {
- for (y=0; y<Vsrc; y++) {
- for (x=0; x<Vsnk; x++) {
- Q12_re[Q_index(t,jCprime,jSprime,kCprime,kSprime,x,iC,iS,y ,Nc,Ns,Vsrc,Vsnk)] += weights[wnum] * (prop_re[prop_index(1,t,jC,jS,jCprime,jSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] * prop_re[prop_index(2,t,kC,kS,kCprime,kSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] - prop_im[prop_index(1,t,jC,jS,jCprime,jSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] * prop_im[prop_index(2,t,kC,kS,kCprime,kSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)]);
- Q12_im[Q_index(t,jCprime,jSprime,kCprime,kSprime,x,iC,iS,y ,Nc,Ns,Vsrc,Vsnk)] += weights[wnum] * (prop_re[prop_index(1,t,jC,jS,jCprime,jSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] * prop_im[prop_index(2,t,kC,kS,kCprime,kSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] + prop_im[prop_index(1,t,jC,jS,jCprime,jSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] * prop_re[prop_index(2,t,kC,kS,kCprime,kSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)]);
- Q01_re[Q_index(t,jCprime,jSprime,kCprime,kSprime,x,kC,kS,y ,Nc,Ns,Vsrc,Vsnk)] += weights[wnum] * (prop_re[prop_index(0,t,iC,iS,kCprime,kSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] * prop_re[prop_index(1,t,jC,jS,jCprime,jSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] - prop_im[prop_index(0,t,iC,iS,kCprime,kSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] * prop_im[prop_index(1,t,jC,jS,jCprime,jSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)]);
- Q01_im[Q_index(t,jCprime,jSprime,kCprime,kSprime,x,kC,kS,y ,Nc,Ns,Vsrc,Vsnk)] += weights[wnum] * (prop_re[prop_index(0,t,iC,iS,kCprime,kSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] * prop_im[prop_index(1,t,jC,jS,jCprime,jSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] + prop_im[prop_index(0,t,iC,iS,kCprime,kSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] * prop_re[prop_index(1,t,jC,jS,jCprime,jSprime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)]);
- }
- }
- }
- }
- }
- }
- }
- }
- /* build q2-exchange block */
- for (t=0; t<Nt; t++) {
- for (jCprime=0; jCprime<Nc; jCprime++) {
- for (jSprime=0; jSprime<Ns; jSprime++) {
- for (kCprime=0; kCprime<Nc; kCprime++) {
- for (kSprime=0; kSprime<Ns; kSprime++) {
- for (x1=0; x1<Vsnk; x1++) {
- for (iC=0; iC<Nc; iC++) {
- for (iS=0; iS<Ns; iS++) {
- for (iCprime=0; iCprime<Nc; iCprime++) {
- for (iSprime=0; iSprime<Ns; iSprime++) {
- for (y=0; y<Vsrc; y++) {
- for (x2=0; x2<Vsnk; x2++) {
- prop_prod_re = Q12_re[Q_index(t,jCprime,jSprime,kCprime,kSprime,x1,iC,iS,y ,Nc,Ns,Vsrc,Vsnk)] * prop_re[prop_index(0,t,iC,iS,iCprime,iSprime,y,x2 ,Nc,Ns,Vsrc,Vsnk,Nt)] - Q12_im[Q_index(t,jCprime,jSprime,kCprime,kSprime,x1,iC,iS,y ,Nc,Ns,Vsrc,Vsnk)] * prop_im[prop_index(0,t,iC,iS,iCprime,iSprime,y,x2 ,Nc,Ns,Vsrc,Vsnk,Nt)];
- prop_prod_im = Q12_re[Q_index(t,jCprime,jSprime,kCprime,kSprime,x1,iC,iS,y ,Nc,Ns,Vsrc,Vsnk)] * prop_im[prop_index(0,t,iC,iS,iCprime,iSprime,y,x2 ,Nc,Ns,Vsrc,Vsnk,Nt)] + Q12_im[Q_index(t,jCprime,jSprime,kCprime,kSprime,x1,iC,iS,y ,Nc,Ns,Vsrc,Vsnk)] * prop_re[prop_index(0,t,iC,iS,iCprime,iSprime,y,x2 ,Nc,Ns,Vsrc,Vsnk,Nt)];
- prop_prod_re -= Q01_re[Q_index(t,jCprime,jSprime,kCprime,kSprime,x1,iC,iS,y ,Nc,Ns,Vsrc,Vsnk)] * prop_re[prop_index(2,t,iC,iS,iCprime,iSprime,y,x2 ,Nc,Ns,Vsrc,Vsnk,Nt)] - Q01_im[Q_index(t,jCprime,jSprime,kCprime,kSprime,x1,iC,iS,y ,Nc,Ns,Vsrc,Vsnk)] * prop_im[prop_index(2,t,iC,iS,iCprime,iSprime,y,x2 ,Nc,Ns,Vsrc,Vsnk,Nt)];
- prop_prod_im -= Q01_re[Q_index(t,jCprime,jSprime,kCprime,kSprime,x1,iC,iS,y ,Nc,Ns,Vsrc,Vsnk)] * prop_im[prop_index(2,t,iC,iS,iCprime,iSprime,y,x2 ,Nc,Ns,Vsrc,Vsnk,Nt)] + Q01_im[Q_index(t,jCprime,jSprime,kCprime,kSprime,x1,iC,iS,y ,Nc,Ns,Vsrc,Vsnk)] * prop_re[prop_index(2,t,iC,iS,iCprime,iSprime,y,x2 ,Nc,Ns,Vsrc,Vsnk,Nt)];
- for (n=0; n<Nsrc; n++) {
- Bdouble_re[Bdouble_index(t,iCprime,iSprime,kCprime,kSprime,x1,jCprime,jSprime,x2,n ,Nc,Ns,Vsnk,Nsrc)] += psi_re[index_2d(y,n ,Nsrc)] * prop_prod_re - psi_im[index_2d(y,n ,Nsrc)] * prop_prod_im;
- Bdouble_im[Bdouble_index(t,iCprime,iSprime,kCprime,kSprime,x1,jCprime,jSprime,x2,n ,Nc,Ns,Vsnk,Nsrc)] += psi_re[index_2d(y,n ,Nsrc)] * prop_prod_im + psi_im[index_2d(y,n ,Nsrc)] * prop_prod_re;
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- free(Q12_re);
- free(Q12_im);
- free(Q01_re);
- free(Q01_im);
- }
- void make_dibaryon_correlator(double* C_re,
- double* C_im,
- const double* B1_Blocal_re,
- const double* B1_Blocal_im,
- const double* B1_Bsingle_re,
- const double* B1_Bsingle_im,
- const double* B1_Bdouble_re,
- const double* B1_Bdouble_im,
- const double* B2_Blocal_re,
- const double* B2_Blocal_im,
- const double* B2_Bsingle_re,
- const double* B2_Bsingle_im,
- const double* B2_Bdouble_re,
- const double* B2_Bdouble_im,
- const int* perms,
- const int* sigs,
- const double overall_weight,
- const int* snk_color_weights,
- const int* snk_spin_weights,
- const double* snk_weights,
- const double* snk_psi_re,
- const double* snk_psi_im,
- const int Nc,
- const int Ns,
- const int Vsrc,
- const int Vsnk,
- const int Nt,
- const int Nw,
- const int Nq,
- const int Nsrc,
- const int Nsnk,
- const int Nperms) {
- /* indices */
- int iC1,iS1,jC1,jS1,kC1,kS1,iC2,iS2,jC2,jS2,kC2,kS2,x1,x2,t,wnum,nperm,b,n,m;
- int Nb = 2;
- int Nw2 = Nw*Nw;
- double term_re, term_im, new_term_re, new_term_im;
- /* build dibaryon */
- int snk_1_nq[Nb];
- int snk_2_nq[Nb];
- int snk_3_nq[Nb];
- int snk_1_b[Nb];
- int snk_2_b[Nb];
- int snk_3_b[Nb];
- int snk_1[Nb];
- int snk_2[Nb];
- int snk_3[Nb];
- for (nperm=0; nperm<Nperms; nperm++) {
- for (b=0; b<Nb; b++) {
- snk_1[b] = perms[index_2d(nperm,Nq*b+0 ,2*Nq)] - 1;
- snk_2[b] = perms[index_2d(nperm,Nq*b+1 ,2*Nq)] - 1;
- snk_3[b] = perms[index_2d(nperm,Nq*b+2 ,2*Nq)] - 1;
- snk_1_b[b] = (snk_1[b] - snk_1[b] % Nq) / Nq;
- snk_2_b[b] = (snk_2[b] - snk_2[b] % Nq) / Nq;
- snk_3_b[b] = (snk_3[b] - snk_3[b] % Nq) / Nq;
- snk_1_nq[b] = snk_1[b] % Nq;
- snk_2_nq[b] = snk_2[b] % Nq;
- snk_3_nq[b] = snk_3[b] % Nq;
- }
- for (wnum=0; wnum< Nw2; wnum++) {
- iC1 = snk_color_weights[index_3d(snk_1_b[0],wnum,snk_1_nq[0] ,Nw2,Nq)];
- iS1 = snk_spin_weights[index_3d(snk_1_b[0],wnum,snk_1_nq[0] ,Nw2,Nq)];
- jC1 = snk_color_weights[index_3d(snk_2_b[0],wnum,snk_2_nq[0] ,Nw2,Nq)];
- jS1 = snk_spin_weights[index_3d(snk_2_b[0],wnum,snk_2_nq[0] ,Nw2,Nq)];
- kC1 = snk_color_weights[index_3d(snk_3_b[0],wnum,snk_3_nq[0] ,Nw2,Nq)];
- kS1 = snk_spin_weights[index_3d(snk_3_b[0],wnum,snk_3_nq[0] ,Nw2,Nq)];
- iC2 = snk_color_weights[index_3d(snk_1_b[1],wnum,snk_1_nq[1] ,Nw2,Nq)];
- iS2 = snk_spin_weights[index_3d(snk_1_b[1],wnum,snk_1_nq[1] ,Nw2,Nq)];
- jC2 = snk_color_weights[index_3d(snk_2_b[1],wnum,snk_2_nq[1] ,Nw2,Nq)];
- jS2 = snk_spin_weights[index_3d(snk_2_b[1],wnum,snk_2_nq[1] ,Nw2,Nq)];
- kC2 = snk_color_weights[index_3d(snk_3_b[1],wnum,snk_3_nq[1] ,Nw2,Nq)];
- kS2 = snk_spin_weights[index_3d(snk_3_b[1],wnum,snk_3_nq[1] ,Nw2,Nq)];
- for (t=0; t<Nt; t++) {
- for (x1=0; x1<Vsnk; x1++) {
- for (x2=0; x2<Vsnk; x2++) {
- for (m=0; m<Nsrc; m++) {
- term_re = sigs[nperm] * overall_weight * snk_weights[wnum];
- term_im = 0.0;
- for (b=0; b<Nb; b++) {
- if ((snk_1_b[b] == 0) && (snk_2_b[b] == 0) && (snk_3_b[b] == 0)) {
- new_term_re = term_re * B1_Blocal_re[Blocal_index(t,iC1,iS1,kC1,kS1,x1,jC1,jS1,m ,Nc,Ns,Vsnk,Nsrc)] - term_im * B1_Blocal_im[Blocal_index(t,iC1,iS1,kC1,kS1,x1,jC1,jS1,m ,Nc,Ns,Vsnk,Nsrc)];
- new_term_im = term_re * B1_Blocal_im[Blocal_index(t,iC1,iS1,kC1,kS1,x1,jC1,jS1,m ,Nc,Ns,Vsnk,Nsrc)] + term_im * B1_Blocal_re[Blocal_index(t,iC1,iS1,kC1,kS1,x1,jC1,jS1,m ,Nc,Ns,Vsnk,Nsrc)];
- }
- else if ((snk_1_b[b] == 1) && (snk_2_b[b] == 1) && (snk_3_b[b] == 1)) {
- new_term_re = term_re * B2_Blocal_re[Blocal_index(t,iC2,iS2,kC2,kS2,x2,jC2,jS2,m ,Nc,Ns,Vsnk,Nsrc)] - term_im * B2_Blocal_im[Blocal_index(t,iC2,iS2,kC2,kS2,x2,jC2,jS2,m ,Nc,Ns,Vsnk,Nsrc)];
- new_term_im = term_re * B2_Blocal_im[Blocal_index(t,iC2,iS2,kC2,kS2,x2,jC2,jS2,m ,Nc,Ns,Vsnk,Nsrc)] + term_im * B2_Blocal_re[Blocal_index(t,iC2,iS2,kC2,kS2,x2,jC2,jS2,m ,Nc,Ns,Vsnk,Nsrc)];
- }
- else if ((snk_1_b[b] == 0) && (snk_3_b[b] == 0)) {
- new_term_re = term_re * B1_Bsingle_re[Bdouble_index(t,iC1,iS1,kC1,kS1,x1,jC1,jS1,x2,m ,Nc,Ns,Vsnk,Nsrc)] - term_im * B1_Bsingle_im[Bdouble_index(t,iC1,iS1,kC1,kS1,x1,jC1,jS1,x2,m ,Nc,Ns,Vsnk,Nsrc)];
- new_term_im = term_re * B1_Bsingle_im[Bdouble_index(t,iC1,iS1,kC1,kS1,x1,jC1,jS1,x2,m ,Nc,Ns,Vsnk,Nsrc)] + term_im * B1_Bsingle_re[Bdouble_index(t,iC1,iS1,kC1,kS1,x1,jC1,jS1,x2,m ,Nc,Ns,Vsnk,Nsrc)];
- }
- else if ((snk_1_b[b] == 1) && (snk_3_b[b] == 1)) {
- new_term_re = term_re * B2_Bsingle_re[Bdouble_index(t,iC2,iS2,kC2,kS2,x2,jC2,jS2,x1,m ,Nc,Ns,Vsnk,Nsrc)] - term_im * B2_Bsingle_im[Bdouble_index(t,iC2,iS2,kC2,kS2,x2,jC2,jS2,x1,m ,Nc,Ns,Vsnk,Nsrc)];
- new_term_im = term_re * B2_Bsingle_im[Bdouble_index(t,iC2,iS2,kC2,kS2,x2,jC2,jS2,x1,m ,Nc,Ns,Vsnk,Nsrc)] + term_im * B2_Bsingle_re[Bdouble_index(t,iC2,iS2,kC2,kS2,x2,jC2,jS2,x1,m ,Nc,Ns,Vsnk,Nsrc)];
- }
- else if (((snk_1_b[b] == 0) && (snk_2_b[b] == 0)) || ((snk_2_b[b] == 0) && (snk_3_b[b] == 0))) {
- new_term_re = term_re * B1_Bdouble_re[Bdouble_index(t,iC1,iS1,kC1,kS1,x1,jC1,jS1,x2,m ,Nc,Ns,Vsnk,Nsrc)] - term_im * B1_Bdouble_im[Bdouble_index(t,iC1,iS1,kC1,kS1,x1,jC1,jS1,x2,m ,Nc,Ns,Vsnk,Nsrc)];
- new_term_im = term_re * B1_Bdouble_im[Bdouble_index(t,iC1,iS1,kC1,kS1,x1,jC1,jS1,x2,m ,Nc,Ns,Vsnk,Nsrc)] + term_im * B1_Bdouble_re[Bdouble_index(t,iC1,iS1,kC1,kS1,x1,jC1,jS1,x2,m ,Nc,Ns,Vsnk,Nsrc)];
- }
- else if (((snk_1_b[b] == 1) && (snk_2_b[b] == 1)) || ((snk_2_b[b] == 1) && (snk_3_b[b] == 1))) {
- new_term_re = term_re * B2_Bdouble_re[Bdouble_index(t,iC2,iS2,kC2,kS2,x2,jC2,jS2,x1,m ,Nc,Ns,Vsnk,Nsrc)] - term_im * B2_Bdouble_im[Bdouble_index(t,iC2,iS2,kC2,kS2,x2,jC2,jS2,x1,m ,Nc,Ns,Vsnk,Nsrc)];
- new_term_im = term_re * B2_Bdouble_im[Bdouble_index(t,iC2,iS2,kC2,kS2,x2,jC2,jS2,x1,m ,Nc,Ns,Vsnk,Nsrc)] + term_im * B2_Bdouble_re[Bdouble_index(t,iC2,iS2,kC2,kS2,x2,jC2,jS2,x1,m ,Nc,Ns,Vsnk,Nsrc)];
- }
- term_re = new_term_re;
- term_im = new_term_im;
- }
- for (n=0; n<Nsnk; n++) {
- C_re[index_3d(m,n,t,Nsnk,Nt)] += snk_psi_re[index_3d(x1,x2,n ,Vsnk,Nsnk)] * term_re - snk_psi_im[index_3d(x1,x2,n ,Vsnk,Nsnk)] * term_im;
- C_im[index_3d(m,n,t,Nsnk,Nt)] += snk_psi_re[index_3d(x1,x2,n ,Vsnk,Nsnk)] * term_im + snk_psi_im[index_3d(x1,x2,n ,Vsnk,Nsnk)] * term_re;
- }
- }
- }
- }
- }
- }
- }
- }
- void make_dibaryon_hex_correlator(double* C_re,
- double* C_im,
- const double* B1_Blocal_re,
- const double* B1_Blocal_im,
- const double* B2_Blocal_re,
- const double* B2_Blocal_im,
- const int* perms,
- const int* sigs,
- const double overall_weight,
- const int* snk_color_weights,
- const int* snk_spin_weights,
- const double* snk_weights,
- const double* hex_snk_psi_re,
- const double* hex_snk_psi_im,
- const int Nc,
- const int Ns,
- const int Vsrc,
- const int Vsnk,
- const int Nt,
- const int Nw,
- const int Nq,
- const int Nsrc,
- const int NsnkHex,
- const int Nperms) {
- /* indices */
- int iC1,iS1,jC1,jS1,kC1,kS1,iC2,iS2,jC2,jS2,kC2,kS2,x,t,wnum,nperm,b,n,m;
- int Nb = 2;
- int Nw2 = Nw*Nw;
- double term_re, term_im;
- /* build dibaryon */
- int snk_1_nq[Nb];
- int snk_2_nq[Nb];
- int snk_3_nq[Nb];
- int snk_1_b[Nb];
- int snk_2_b[Nb];
- int snk_3_b[Nb];
- int snk_1[Nb];
- int snk_2[Nb];
- int snk_3[Nb];
- for (nperm=0; nperm<Nperms; nperm++) {
- for (b=0; b<Nb; b++) {
- snk_1[b] = perms[index_2d(nperm,Nq*b+0 ,2*Nq)] - 1;
- snk_2[b] = perms[index_2d(nperm,Nq*b+1 ,2*Nq)] - 1;
- snk_3[b] = perms[index_2d(nperm,Nq*b+2 ,2*Nq)] - 1;
- snk_1_b[b] = (snk_1[b] - snk_1[b] % Nq) / Nq;
- snk_2_b[b] = (snk_2[b] - snk_2[b] % Nq) / Nq;
- snk_3_b[b] = (snk_3[b] - snk_3[b] % Nq) / Nq;
- snk_1_nq[b] = snk_1[b] % Nq;
- snk_2_nq[b] = snk_2[b] % Nq;
- snk_3_nq[b] = snk_3[b] % Nq;
- }
- for (wnum=0; wnum< Nw2; wnum++) {
- iC1 = snk_color_weights[index_3d(snk_1_b[0],wnum,snk_1_nq[0] ,Nw2,Nq)];
- iS1 = snk_spin_weights[index_3d(snk_1_b[0],wnum,snk_1_nq[0] ,Nw2,Nq)];
- jC1 = snk_color_weights[index_3d(snk_2_b[0],wnum,snk_2_nq[0] ,Nw2,Nq)];
- jS1 = snk_spin_weights[index_3d(snk_2_b[0],wnum,snk_2_nq[0] ,Nw2,Nq)];
- kC1 = snk_color_weights[index_3d(snk_3_b[0],wnum,snk_3_nq[0] ,Nw2,Nq)];
- kS1 = snk_spin_weights[index_3d(snk_3_b[0],wnum,snk_3_nq[0] ,Nw2,Nq)];
- iC2 = snk_color_weights[index_3d(snk_1_b[1],wnum,snk_1_nq[1] ,Nw2,Nq)];
- iS2 = snk_spin_weights[index_3d(snk_1_b[1],wnum,snk_1_nq[1] ,Nw2,Nq)];
- jC2 = snk_color_weights[index_3d(snk_2_b[1],wnum,snk_2_nq[1] ,Nw2,Nq)];
- jS2 = snk_spin_weights[index_3d(snk_2_b[1],wnum,snk_2_nq[1] ,Nw2,Nq)];
- kC2 = snk_color_weights[index_3d(snk_3_b[1],wnum,snk_3_nq[1] ,Nw2,Nq)];
- kS2 = snk_spin_weights[index_3d(snk_3_b[1],wnum,snk_3_nq[1] ,Nw2,Nq)];
- for (t=0; t<Nt; t++) {
- for (x=0; x<Vsnk; x++) {
- for (m=0; m<Nsrc; m++) {
- term_re = sigs[nperm] * overall_weight * snk_weights[wnum] * (B1_Blocal_re[Blocal_index(t,iC1,iS1,kC1,kS1,x,jC1,jS1,m ,Nc,Ns,Vsnk,Nsrc)] * B2_Blocal_re[Blocal_index(t,iC2,iS2,kC2,kS2,x,jC2,jS2,m ,Nc,Ns,Vsnk,Nsrc)] - B1_Blocal_im[Blocal_index(t,iC1,iS1,kC1,kS1,x,jC1,jS1,m ,Nc,Ns,Vsnk,Nsrc)] * B2_Blocal_im[Blocal_index(t,iC2,iS2,kC2,kS2,x,jC2,jS2,m ,Nc,Ns,Vsnk,Nsrc)]);
- term_im = sigs[nperm] * overall_weight * snk_weights[wnum] * (B1_Blocal_re[Blocal_index(t,iC1,iS1,kC1,kS1,x,jC1,jS1,m ,Nc,Ns,Vsnk,Nsrc)] * B2_Blocal_im[Blocal_index(t,iC2,iS2,kC2,kS2,x,jC2,jS2,m ,Nc,Ns,Vsnk,Nsrc)] + B1_Blocal_im[Blocal_index(t,iC1,iS1,kC1,kS1,x,jC1,jS1,m ,Nc,Ns,Vsnk,Nsrc)] * B2_Blocal_re[Blocal_index(t,iC2,iS2,kC2,kS2,x,jC2,jS2,m ,Nc,Ns,Vsnk,Nsrc)]);
- for (n=0; n<NsnkHex; n++) {
- C_re[index_3d(m,n,t ,NsnkHex,Nt)] += hex_snk_psi_re[index_2d(x,n ,NsnkHex)] * term_re - hex_snk_psi_im[index_2d(x,n ,NsnkHex)] * term_im;
- C_im[index_3d(m,n,t ,NsnkHex,Nt)] += hex_snk_psi_re[index_2d(x,n ,NsnkHex)] * term_im + hex_snk_psi_im[index_2d(x,n ,NsnkHex)] * term_re;
- }
- }
- }
- }
- }
- }
- }
- void make_hex_dibaryon_correlator(double* C_re,
- double* C_im,
- const double* B1_Blocal_re,
- const double* B1_Blocal_im,
- const double* B2_Blocal_re,
- const double* B2_Blocal_im,
- const int* perms,
- const int* sigs,
- const double overall_weight,
- const int* src_color_weights,
- const int* src_spin_weights,
- const double* src_weights,
- const double* hex_src_psi_re,
- const double* hex_src_psi_im,
- const int Nc,
- const int Ns,
- const int Vsrc,
- const int Vsnk,
- const int Nt,
- const int Nw,
- const int Nq,
- const int NsrcHex,
- const int Nsnk,
- const int Nperms) {
- /* indices */
- int iC1,iS1,jC1,jS1,kC1,kS1,iC2,iS2,jC2,jS2,kC2,kS2,x,t,wnum,nperm,b,n,m,y;
- int Nb = 2;
- int Nw2 = Nw*Nw;
- double term_re, term_im;
- /* build dibaryon */
- int src_1_nq[Nb];
- int src_2_nq[Nb];
- int src_3_nq[Nb];
- int src_1_b[Nb];
- int src_2_b[Nb];
- int src_3_b[Nb];
- int src_1[Nb];
- int src_2[Nb];
- int src_3[Nb];
- for (nperm=0; nperm<Nperms; nperm++) {
- for (b=0; b<Nb; b++) {
- src_1[b] = perms[index_2d(nperm,Nq*b+0 ,2*Nq)] - 1;
- src_2[b] = perms[index_2d(nperm,Nq*b+1 ,2*Nq)] - 1;
- src_3[b] = perms[index_2d(nperm,Nq*b+2 ,2*Nq)] - 1;
- src_1_b[b] = (src_1[b] - src_1[b] % Nq) / Nq;
- src_2_b[b] = (src_2[b] - src_2[b] % Nq) / Nq;
- src_3_b[b] = (src_3[b] - src_3[b] % Nq) / Nq;
- src_1_nq[b] = src_1[b] % Nq;
- src_2_nq[b] = src_2[b] % Nq;
- src_3_nq[b] = src_3[b] % Nq;
- }
- for (wnum=0; wnum< Nw2; wnum++) {
- iC1 = src_color_weights[index_3d(src_1_b[0],wnum,src_1_nq[0] ,Nw2,Nq)];
- iS1 = src_spin_weights[index_3d(src_1_b[0],wnum,src_1_nq[0] ,Nw2,Nq)];
- jC1 = src_color_weights[index_3d(src_2_b[0],wnum,src_2_nq[0] ,Nw2,Nq)];
- jS1 = src_spin_weights[index_3d(src_2_b[0],wnum,src_2_nq[0] ,Nw2,Nq)];
- kC1 = src_color_weights[index_3d(src_3_b[0],wnum,src_3_nq[0] ,Nw2,Nq)];
- kS1 = src_spin_weights[index_3d(src_3_b[0],wnum,src_3_nq[0] ,Nw2,Nq)];
- iC2 = src_color_weights[index_3d(src_1_b[1],wnum,src_1_nq[1] ,Nw2,Nq)];
- iS2 = src_spin_weights[index_3d(src_1_b[1],wnum,src_1_nq[1] ,Nw2,Nq)];
- jC2 = src_color_weights[index_3d(src_2_b[1],wnum,src_2_nq[1] ,Nw2,Nq)];
- jS2 = src_spin_weights[index_3d(src_2_b[1],wnum,src_2_nq[1] ,Nw2,Nq)];
- kC2 = src_color_weights[index_3d(src_3_b[1],wnum,src_3_nq[1] ,Nw2,Nq)];
- kS2 = src_spin_weights[index_3d(src_3_b[1],wnum,src_3_nq[1] ,Nw2,Nq)];
- for (t=0; t<Nt; t++) {
- for (y=0; y<Vsrc; y++) {
- for (n=0; n<Nsnk; n++) {
- term_re = sigs[nperm] * overall_weight * src_weights[wnum] * (B1_Blocal_re[Blocal_index(t,iC1,iS1,kC1,kS1,y,jC1,jS1,n ,Nc,Ns,Vsrc,Nsnk)] * B2_Blocal_re[Blocal_index(t,iC2,iS2,kC2,kS2,y,jC2,jS2,n ,Nc,Ns,Vsrc,Nsnk)] - B1_Blocal_im[Blocal_index(t,iC1,iS1,kC1,kS1,y,jC1,jS1,n ,Nc,Ns,Vsrc,Nsnk)] * B2_Blocal_im[Blocal_index(t,iC2,iS2,kC2,kS2,y,jC2,jS2,n ,Nc,Ns,Vsrc,Nsnk)]);
- term_im = sigs[nperm] * overall_weight * src_weights[wnum] * (B1_Blocal_re[Blocal_index(t,iC1,iS1,kC1,kS1,y,jC1,jS1,n ,Nc,Ns,Vsrc,Nsnk)] * B2_Blocal_im[Blocal_index(t,iC2,iS2,kC2,kS2,y,jC2,jS2,n ,Nc,Ns,Vsrc,Nsnk)] + B1_Blocal_im[Blocal_index(t,iC1,iS1,kC1,kS1,y,jC1,jS1,n ,Nc,Ns,Vsrc,Nsnk)] * B2_Blocal_re[Blocal_index(t,iC2,iS2,kC2,kS2,y,jC2,jS2,n ,Nc,Ns,Vsrc,Nsnk)]);
- for (m=0; m<NsrcHex; m++) {
- C_re[index_3d(m,n,t ,Nsnk,Nt)] += hex_src_psi_re[index_2d(y,m, NsrcHex)] * term_re - hex_src_psi_im[index_2d(y,m, NsrcHex)] * term_im;
- C_im[index_3d(m,n,t ,Nsnk,Nt)] += hex_src_psi_re[index_2d(y,m, NsrcHex)] * term_im + hex_src_psi_im[index_2d(y,m, NsrcHex)] * term_re;
- }
- }
- }
- }
- }
- }
- }
- void make_hex_correlator(double* C_re,
- double* C_im,
- const double* B1_prop_re,
- const double* B1_prop_im,
- const double* B2_prop_re,
- const double* B2_prop_im,
- const int* perms,
- const int* sigs,
- const int* B1_src_color_weights,
- const int* B1_src_spin_weights,
- const double* B1_src_weights,
- const int* B2_src_color_weights,
- const int* B2_src_spin_weights,
- const double* B2_src_weights,
- const double overall_weight,
- const int* snk_color_weights,
- const int* snk_spin_weights,
- const double* snk_weights,
- const double* hex_src_psi_re,
- const double* hex_src_psi_im,
- const double* hex_snk_psi_re,
- const double* hex_snk_psi_im,
- const int Nc,
- const int Ns,
- const int Vsrc,
- const int Vsnk,
- const int Nt,
- const int Nw,
- const int Nq,
- const int NsrcHex,
- const int NsnkHex,
- const int Nperms) {
- /* indices */
- int x,t,wnum,nperm,b,n,m,y,wnumprime;
- int iC1prime,iS1prime,jC1prime,jS1prime,kC1prime,kS1prime,iC2prime,iS2prime,jC2prime,jS2prime,kC2prime,kS2prime;
- int iC1,iS1,jC1,jS1,kC1,kS1,iC2,iS2,jC2,jS2,kC2,kS2;
- int Nb = 2;
- int Nw2 = Nw*Nw;
- double B1_prop_prod_02_re, B1_prop_prod_02_im, B1_prop_prod_re, B1_prop_prod_im, B2_prop_prod_02_re, B2_prop_prod_02_im, B2_prop_prod_re, B2_prop_prod_im;
- double prop_prod_re, prop_prod_im, new_prop_prod_re, new_prop_prod_im;
- /* build dibaryon */
- int snk_1_nq[Nb];
- int snk_2_nq[Nb];
- int snk_3_nq[Nb];
- int snk_1_b[Nb];
- int snk_2_b[Nb];
- int snk_3_b[Nb];
- int snk_1[Nb];
- int snk_2[Nb];
- int snk_3[Nb];
- for (nperm=0; nperm<Nperms; nperm++) {
- for (b=0; b<Nb; b++) {
- snk_1[b] = perms[index_2d(nperm,Nq*b+0 ,2*Nq)] - 1;
- snk_2[b] = perms[index_2d(nperm,Nq*b+1 ,2*Nq)] - 1;
- snk_3[b] = perms[index_2d(nperm,Nq*b+2 ,2*Nq)] - 1;
- snk_1_b[b] = (snk_1[b] - snk_1[b] % Nq) / Nq;
- snk_2_b[b] = (snk_2[b] - snk_2[b] % Nq) / Nq;
- snk_3_b[b] = (snk_3[b] - snk_3[b] % Nq) / Nq;
- snk_1_nq[b] = snk_1[b] % Nq;
- snk_2_nq[b] = snk_2[b] % Nq;
- snk_3_nq[b] = snk_3[b] % Nq;
- }
- for (wnumprime=0; wnumprime< Nw2; wnumprime++) {
- iC1prime = snk_color_weights[index_3d(snk_1_b[0],wnumprime,snk_1_nq[0] ,Nw2,Nq)];
- iS1prime = snk_spin_weights[index_3d(snk_1_b[0],wnumprime,snk_1_nq[0] ,Nw2,Nq)];
- jC1prime = snk_color_weights[index_3d(snk_2_b[0],wnumprime,snk_2_nq[0] ,Nw2,Nq)];
- jS1prime = snk_spin_weights[index_3d(snk_2_b[0],wnumprime,snk_2_nq[0] ,Nw2,Nq)];
- kC1prime = snk_color_weights[index_3d(snk_3_b[0],wnumprime,snk_3_nq[0] ,Nw2,Nq)];
- kS1prime = snk_spin_weights[index_3d(snk_3_b[0],wnumprime,snk_3_nq[0] ,Nw2,Nq)];
- iC2prime = snk_color_weights[index_3d(snk_1_b[1],wnumprime,snk_1_nq[1] ,Nw2,Nq)];
- iS2prime = snk_spin_weights[index_3d(snk_1_b[1],wnumprime,snk_1_nq[1] ,Nw2,Nq)];
- jC2prime = snk_color_weights[index_3d(snk_2_b[1],wnumprime,snk_2_nq[1] ,Nw2,Nq)];
- jS2prime = snk_spin_weights[index_3d(snk_2_b[1],wnumprime,snk_2_nq[1] ,Nw2,Nq)];
- kC2prime = snk_color_weights[index_3d(snk_3_b[1],wnumprime,snk_3_nq[1] ,Nw2,Nq)];
- kS2prime = snk_spin_weights[index_3d(snk_3_b[1],wnumprime,snk_3_nq[1] ,Nw2,Nq)];
- for (t=0; t<Nt; t++) {
- for (y=0; y<Vsrc; y++) {
- for (x=0; x<Vsnk; x++) {
- B1_prop_prod_re = 0;
- B1_prop_prod_im = 0;
- for (wnum=0; wnum<Nw; wnum++) {
- iC1 = B1_src_color_weights[index_2d(wnum,0, Nq)];
- iS1 = B1_src_spin_weights[index_2d(wnum,0, Nq)];
- jC1 = B1_src_color_weights[index_2d(wnum,1, Nq)];
- jS1 = B1_src_spin_weights[index_2d(wnum,1, Nq)];
- kC1 = B1_src_color_weights[index_2d(wnum,2, Nq)];
- kS1 = B1_src_spin_weights[index_2d(wnum,2, Nq)];
- B1_prop_prod_02_re = B1_src_weights[wnum] * ( (B1_prop_re[prop_index(0,t,iC1,iS1,iC1prime,iS1prime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] * B1_prop_re[prop_index(2,t,kC1,kS1,kC1prime,kS1prime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] - B1_prop_im[prop_index(0,t,iC1,iS1,iC1prime,iS1prime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] * B1_prop_im[prop_index(2,t,kC1,kS1,kC1prime,kS1prime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)]) - (B1_prop_re[prop_index(0,t,iC1,iS1,kC1prime,kS1prime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] * B1_prop_re[prop_index(2,t,kC1,kS1,iC1prime,iS1prime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] - B1_prop_im[prop_index(0,t,iC1,iS1,kC1prime,kS1prime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] * B1_prop_im[prop_index(2,t,kC1,kS1,iC1prime,iS1prime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)]) );
- B1_prop_prod_02_im = B1_src_weights[wnum] * ( (B1_prop_re[prop_index(0,t,iC1,iS1,iC1prime,iS1prime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] * B1_prop_im[prop_index(2,t,kC1,kS1,kC1prime,kS1prime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] + B1_prop_im[prop_index(0,t,iC1,iS1,iC1prime,iS1prime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] * B1_prop_re[prop_index(2,t,kC1,kS1,kC1prime,kS1prime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)]) - (B1_prop_re[prop_index(0,t,iC1,iS1,kC1prime,kS1prime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] * B1_prop_im[prop_index(2,t,kC1,kS1,iC1prime,iS1prime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] + B1_prop_im[prop_index(0,t,iC1,iS1,kC1prime,kS1prime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] * B1_prop_re[prop_index(2,t,kC1,kS1,iC1prime,iS1prime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)]) );
- B1_prop_prod_re += B1_prop_prod_02_re * B1_prop_re[prop_index(1,t,jC1,jS1,jC1prime,jS1prime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] - B1_prop_prod_02_im * B1_prop_im[prop_index(1,t,jC1,jS1,jC1prime,jS1prime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)];
- B1_prop_prod_im += B1_prop_prod_02_re * B1_prop_im[prop_index(1,t,jC1,jS1,jC1prime,jS1prime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] + B1_prop_prod_02_im * B1_prop_re[prop_index(1,t,jC1,jS1,jC1prime,jS1prime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)];
- }
- B2_prop_prod_re = 0;
- B2_prop_prod_im = 0;
- for (wnum=0; wnum<Nw; wnum++) {
- iC2 = B2_src_color_weights[index_2d(wnum,0, Nq)];
- iS2 = B2_src_spin_weights[index_2d(wnum,0, Nq)];
- jC2 = B2_src_color_weights[index_2d(wnum,1, Nq)];
- jS2 = B2_src_spin_weights[index_2d(wnum,1, Nq)];
- kC2 = B2_src_color_weights[index_2d(wnum,2, Nq)];
- kS2 = B2_src_spin_weights[index_2d(wnum,2, Nq)];
- B2_prop_prod_02_re = B2_src_weights[wnum] * ( (B2_prop_re[prop_index(0,t,iC2,iS2,iC2prime,iS2prime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] * B2_prop_re[prop_index(2,t,kC2,kS2,kC2prime,kS2prime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] - B2_prop_im[prop_index(0,t,iC2,iS2,iC2prime,iS2prime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] * B2_prop_im[prop_index(2,t,kC2,kS2,kC2prime,kS2prime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)]) - (B2_prop_re[prop_index(0,t,iC2,iS2,kC2prime,kS2prime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] * B2_prop_re[prop_index(2,t,kC2,kS2,iC2prime,iS2prime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] - B2_prop_im[prop_index(0,t,iC2,iS2,kC2prime,kS2prime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] * B2_prop_im[prop_index(2,t,kC2,kS2,iC2prime,iS2prime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)]) );
- B2_prop_prod_02_im = B2_src_weights[wnum] * ( (B2_prop_re[prop_index(0,t,iC2,iS2,iC2prime,iS2prime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] * B2_prop_im[prop_index(2,t,kC2,kS2,kC2prime,kS2prime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] + B2_prop_im[prop_index(0,t,iC2,iS2,iC2prime,iS2prime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] * B2_prop_re[prop_index(2,t,kC2,kS2,kC2prime,kS2prime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)]) - (B2_prop_re[prop_index(0,t,iC2,iS2,kC2prime,kS2prime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] * B2_prop_im[prop_index(2,t,kC2,kS2,iC2prime,iS2prime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] + B2_prop_im[prop_index(0,t,iC2,iS2,kC2prime,kS2prime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] * B2_prop_re[prop_index(2,t,kC2,kS2,iC2prime,iS2prime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)]) );
- B2_prop_prod_re += B2_prop_prod_02_re * B2_prop_re[prop_index(1,t,jC2,jS2,jC2prime,jS2prime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] - B2_prop_prod_02_im * B2_prop_im[prop_index(1,t,jC2,jS2,jC2prime,jS2prime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)];
- B2_prop_prod_im += B2_prop_prod_02_re * B2_prop_im[prop_index(1,t,jC2,jS2,jC2prime,jS2prime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)] + B2_prop_prod_02_im * B2_prop_re[prop_index(1,t,jC2,jS2,jC2prime,jS2prime,y,x ,Nc,Ns,Vsrc,Vsnk,Nt)];
- }
- prop_prod_re = overall_weight * sigs[nperm] * snk_weights[wnumprime] * ( B1_prop_prod_re * B2_prop_prod_re - B1_prop_prod_im * B2_prop_prod_im );
- prop_prod_im = overall_weigh…