#include #include #include #include #include #include "include.h" #include "improved.h" #include "interact.h" #define PI 3.1415926535897932385 #ifndef YUKAWA_FOUR_POINT #define YUKAWA_FOUR_POINT 0 #endif /* Matrix elements of P^- for mesons The quark interactions are calculated "in line" There are several reasons for this: 1. This allows quickest development based on Mma code 2. I have not developed an "improvement" scheme, which is the motivation for calculating the interactions separately. 3. Storage of the interaction would take up a significant amount of memory, due to the larger values of K involved and the large number of functional forms of the various interactions. To convert the Mathematica expressions, I used emacs Query replace regexp: (\([^()]+\))\^2 with pow(\1,2) Sqrt\[\([^[]+\)\] with sqrt(\1) \([0-9a-zA-A\])]\) \([a-zA-Z]\) \1*\2 */ /* The following table was created with Mathematica using: <>HSHIFT][(B)>>HSHIFT][(C)>>HSHIFT] /* The following table was created with Mathematica using: <>HSHIFT][(B)>>HSHIFT]\ [(C)>>HSHIFT][D>>HSHIFT] element elfkappa(partype k){ element sum=0; int i; k&=KMASK; #if 1 /* My way, method for summer 2002 */ for(i=0; i0) for(i=0; i>(HSHIFT+1)]-=((left[k]&(1<>(HSHIFT+1)]-=((left[i]&(1<>(HSHIFT+1)]+=((right[k]&(1<>(HSHIFT+1)]+=((right[i]&(1<re=cos(phase); z->im=sin(phase); } /* This calculates matrix elements of the Hamiltonian for a meson. It does either zero or nonzero transverse momentum based on the value of current->momflag. */ void interact_meson(complex_element *x, partype *left, int npl, partype *right, int npr, element *couplings){ partype left_flip[NPMAX],right_flip[NPMAX]; x->re=0.0; x->im=0.0; #if 1 /* for debugging only -- turn off link-link interactions */ if(left[0]==right[0] && left[npl-1]==right[npr-1]){ /* check quarks */ if(working.momflag) interact_gluec(x,left+1,npl-2,right+1,npr-2,couplings); else interact_glue(&(x->re),left+1,npl-2,right+1,npr-2,couplings); } #else fprintf(stderr,__FILE__": link-link interactions turned off.\n"); #endif /* In the following, we calculate the contibutions from the ends of the strings. */ #if 1 /* debugging flag to turn off ends of the strings */ /* quark-antiquark gauge interactions */ if(npl==2 && npr==2 && H_EQUAL(left[0],right[0]) && H_EQUAL(left[1],right[1])){ if(left[0]!=right[0]){ x->re-=couplings[GGN]/(4*PI*pow((QE(left[0])-QE(right[0])),2)); } else { x->re+=couplings[GGN]*elfquarkquark(left[0],left[1]); } } if(working.momflag) interact_quarkc(x,left,npl,right,npr,couplings,npl-2); else interact_quark(x,left,npl,right,npr,couplings,npl-2); /* Do the anti-quark interactions by transforming the state */ charge_conjugation(left_flip,left,TYPE_MESON,npl); charge_conjugation(right_flip,right,TYPE_MESON,npr); if(working.momflag) interact_quarkc(x,left_flip,npl,right_flip,npr,couplings,npl-2); else interact_quark(x,left_flip,npl,right_flip,npr,couplings,npl-2); #endif /* end of debugging flag to turn off end of string interactions */ #if 1 /* debug print */ if(x->re==0.0 || fabs(x->re)<1.0e10) return; printf(" last x=%f%+f*I: ",x->re,x->im); printstate(left,TYPE_MESON,npl); printf(" - "); printstate(right,TYPE_MESON,npr); printf("\n"); #endif return; } /* Interactions with quarks and gluons (one end of the string) quark-antiquark interactions not included. x is not initialized ngl is number of gluons in left state. */ void interact_quark(complex_element *x, partype *left, int npl, partype *right, int npr, element *couplings, int ngl){ int j; element temp; /* Mass terms and Yukawa self-intertias */ if(npl==npr){ for(j=0; jre+=temp/(2.0*QE(left[0])); if(nplre+=(pow(couplings[KAPPA_A],2)+pow(couplings[KAPPA_S],2))* elfkappa(left[0]); } /* Half the contribution of any gluons */ if(ngl>=1) x->re+=0.25*couplings[MM]/GE(left[1]); } } /* qqgg gauge interactions */ if(npl==npr && ngl>=1){ for(j=2; jre+=couplings[GGN]*elfquarkglue(left[0],left[1]); else if(H_EQUAL(left[0],right[0]) && H_EQUAL(left[1],right[1])) x->re-=couplings[GGN]*(GE(left[1])+GE(right[1]))/ (8.0*PI*sqrt(GE(left[1])*GE(right[1]))* pow(QE(left[0])-QE(right[0]),2)); } } else if(npl+2==npr){ for(j=1; jre+=temp; } } } else if(npr+2==npl){ for(j=1; jre-=couplings[GGN]*(GE(left[1])-GE(left[2]))/ (8*PI*sqrt(GE(left[1])*GE(left[2]))* pow(QE(left[0])-QE(right[0]),2)); } } /* qqg Yukawa interactions */ if(npl+1==npr){ for(j=1; jre-=couplings[KAPPA_S]*couplings[MU_F]*(QE(left[0])+QE(right[0]))/ (4*sqrt(PI*GE(right[1]))*QE(left[0])*QE(right[0])); } temp=couplings[KAPPA_A]*couplings[MU_F]*sqrt(GE(right[1]))/ (4*sqrt(PI)*QE(right[0])*QE(left[0])); ZTIMES(x,&zeta(left[0],right[1],right[0]),temp); } } else if(npr+1==npl){ for(j=1; jre-=couplings[KAPPA_S]*couplings[MU_F]* (QE(left[0])+QE(right[0]))/ (4*sqrt(PI*GE(left[1]))*QE(left[0])*QE(right[0])); } temp=couplings[KAPPA_A]*couplings[MU_F]* sqrt(GE(left[1]))/(4*sqrt(PI)*QE(right[0])*QE(left[0])); ZTIMES(x,&zeta(left[0],left[1],right[0]),temp); } } /* qqgg Yukawa interactions */ #if YUKAWA_FOUR_POINT /* flag to include meson 4-point Yukawa interactions */ if(npl==npr && ngl>=1){ for(j=2; jre+=pow(couplings[KAPPA_S],2)/ (8*PI*sqrt(GE(left[1])*GE(right[1]))*(QE(right[0])+GE(right[1]))); temp=couplings[KAPPA_A]*couplings[KAPPA_S]/ (8*PI*sqrt(GE(left[1])*GE(right[1]))*(QE(right[0])+GE(right[1]))); ZTIMES(x,&zeta(left[0],left[1],right[0]),temp); ZTIMES(x,&zeta(left[0],right[1],right[0]),temp); temp=pow(couplings[KAPPA_A],2)/ (8*PI*sqrt(GE(left[1])*GE(right[1]))*(QE(right[0])+GE(right[1]))); ZTIMES(x,&zetazeta(left[0],left[1],right[1],right[0]),temp); } } else if(npl+2==npr){ for(j=1; jre+=pow(couplings[KAPPA_S],2)/ (8*PI*sqrt(GE(right[1])*GE(right[2]))*(QE(right[0])+GE(right[1]))); temp=couplings[KAPPA_A]*couplings[KAPPA_S]/ (8*PI*sqrt(GE(right[1])*GE(right[2]))*(QE(right[0])+GE(right[1]))); ZTIMES(x,&zeta(left[0],right[1],right[0]),temp); ZTIMES(x,&zeta(left[0],right[2],right[0]),-temp); temp=-pow(couplings[KAPPA_A],2)/ (8*PI*sqrt(GE(right[1])*GE(right[2]))*(QE(right[0])+GE(right[1]))); ZTIMES(x,&zetazeta(left[0],right[2],right[1],right[0]),temp); } } else if(npr+2==npl){ for(j=1; jre+=pow(couplings[KAPPA_S],2)/ (8*PI*sqrt(GE(left[1])*GE(left[2]))* (QE(left[0])+GE(left[1]))); temp=couplings[KAPPA_A]*couplings[KAPPA_S]/ (8*PI*sqrt(GE(left[1])*GE(left[2]))*(GE(left[2])-QE(right[0]))); ZTIMES(x,&zeta(left[0],left[2],right[0]),temp); ZTIMES(x,&zeta(left[0],left[1],right[0]),-temp); temp=pow(couplings[KAPPA_A],2)/ (8*PI*sqrt(GE(left[1])*GE(left[2]))*(GE(left[2])-QE(right[0]))); ZTIMES(x,&zetazeta(left[0],left[1],left[2],right[0]),temp); } } #endif return; } /* quark-gluon interactions with nonzero momentum included. quark-antiquark interactions are not included x is not initialized ngl is number of gluons in left state. */ void interact_quarkc(complex_element *x, partype *left, int npl, partype *right, int npr, element *couplings, int ngl){ int j; element temp; complex_element ztemp,z; /* Mass terms and Yukawa self-intertias we don't have any phase factors here */ if(npl==npr){ for(j=0; jre+=temp/(2.0*QE(left[0])); if(nplre+=(pow(couplings[KAPPA_A],2)+pow(couplings[KAPPA_S],2))* elfkappa(left[0]); } /* Half the contribution of any gluons */ if(ngl>=1) x->re+=0.25*couplings[MM]/GE(left[1]); } } /* qqgg gauge interactions */ if(npl==npr && ngl>=1){ for(j=2; jre+=couplings[GGN]*elfquarkglue(left[0],left[1]); else if(H_EQUAL(left[0],right[0]) && H_EQUAL(left[1],right[1])){ temp=-couplings[GGN]*(GE(left[1])+GE(right[1]))/ (8.0*PI*sqrt(GE(left[1])*GE(right[1]))* pow(QE(left[0])-QE(right[0]),2)); ZTIMES(x,&ztemp,temp); } } } else if(npl+2==npr){ for(j=1; j=1){ for(j=2; j