static void make_infbasis(void) { int i,j; int pcolor[MAXINOUT]; writeF("static void cStrings(int nsub,int *nC, int * power, int ** chains)\n{\n"); writeF(" switch(nsub)\n {\n"); if(!noCChain) for (nsub = 1, inftmp = inf; nsub <= subproc_sq; nsub++) { writeF(" case %d : ",nsub); for (i = 0; i < nin + nout; i++) { int l; locateinbase(inftmp->p_name[i], &l); pcolor[i]=prtclbase[l-1].cdim; if(i<nin) { if(pcolor[i]==3) pcolor[i]=-3; else if(pcolor[i]==-3) pcolor[i]=3;} } infCbases(nin+nout,pcolor,&nC,&cBasisPower,&cChains); if(cBasisPower) { writeF("\n { static int cc[%d]=\n {\n",2*nC*cBasisPower); for(i=0;i<cBasisPower;i++) { writeF(" "); for(j=0; j<nC; j++) { writeF(" %d,%d",cChains[2*i*nC+2*j]+1,cChains[2*i*nC+2*j+1]+1); if(i==cBasisPower-1 && j==nC-1) writeF("\n };"); else writeF(","); } writeF("\n"); } writeF(" *nC=%d; *power=%d; *chains=cc;\n }\n break;\n", nC,cBasisPower); free(cChains); cChains=NULL; } else writeF(" *nC=0; *power=0; *chains=NULL; break;\n"); inftmp = inftmp->next; } writeF(" default: *nC=0; *power=0; *chains=NULL;\n"); writeF(" }\n"); writeF("}\n\n"); }
static void make_infbasis(void) { int i,j; int pcolor[MAXINOUT]; int *cb_pow=malloc(subproc_sq*sizeof(int)); int *cb_nc=malloc(subproc_sq*sizeof(int)); for (nsub = 1, inftmp = inf; nsub <= subproc_sq; nsub++) { for (i = 0; i < nin + nout; i++) { int l; locateinbase(inftmp->p_name[i], &l); pcolor[i]=prtclbase[l-1].cdim; if(i<nin && pcolor[i]!=1 && pcolor[i]!=8) pcolor[i]*=-1; } cBasisPower=infCbases(nin+nout,pcolor,&nC,&cChains); cb_pow[nsub-1]=cBasisPower; cb_nc[nsub-1]=nC; if(nC*cBasisPower) { writeF("\n static int cwb_%d[%d]=\n {\n",nsub, 4*nC*cBasisPower); for(i=0;i<cBasisPower;i++) { writeF(" "); for(j=0; j<nC; j++) { writeF(" %d,%d,%d,%d ", cChains[4*(i*nC+j)], cChains[4*(i*nC+j)+1],cChains[4*(i*nC+j)+2],cChains[4*(i*nC+j)+3]); if(i==cBasisPower-1 && j==nC-1) writeF("\n };"); else writeF(","); } writeF("\n"); } }else writeF("\n#define cwb_%d NULL\n",nsub); inftmp = inftmp->next; } writeF("colorBasis cb_ext[%d]={\n",subproc_sq); for(i=0;i<subproc_sq;i++) { writeF(" { %d, %d, cwb_%d}",cb_pow[i],cb_nc[i],i+1); if(i!=subproc_sq-1) writeF(","); writeF("\n"); } writeF("};\n"); free(cb_pow), free(cb_nc); }
static int c_prog_int(void) { int breaker; int i; long dfirst; if(nin+nout<=4) sumDiag=1; else sumDiag=0; memerror=zeroHeep; mark_(&heapbeg); initvararray(0,'c',3); /* ======= Initialisation parth ======= */ firstVar=nmodelvar; if(!strcmp( modelvars[firstVar].varname,strongconst)) firstVar--; prepareprocinform(); calc_nvars_nfunc(); /* ======= End of Initialisation ====== */ { outFileOpen("%sresults%cservice.c",pathtouser,f_slash); labl(); writeF("#include<math.h>\n"); writeF("#include<complex.h>\n"); writeF("#include\"num_out.h\"\n"); writeF("#include\"num_in.h\"\n"); writeF("double BWrange_ext=2.7;\n"); writeF("int twidth_ext=0;\n"); writeF("int gtwidth_ext=0;\n"); writeF("int gswidth_ext=0;\n"); writeF(" REAL va_ext[%d]={0};\n",nvars+nfunc+1); } geninf("nin_ext",nin); geninf("nout_ext",nout); geninf("nprc_ext",subproc_sq); make_pinf(); geninf("nvar_ext",nvars); geninf("nfunc_ext",nfunc); make_vinf(); { make_den_info(); fprintf(outFile,"\nCalcHEP_interface interface_ext={ %d,\n\"%s\"\n,%d, %d, varName_ext,va_ext," "%d, %d, %d, &pinf_ext, &pinfAux_ext, polarized_ext, &calcFunc_ext, &BWrange_ext,&twidth_ext," ">width_ext,&gswidth_ext, &aWidth_ext, &sqme_ext,&den_info_ext,&build_cb_ext, &cb_pow_ext," "&cb_nc_ext, &cb_chains_ext, &cb_coeff_ext, &destroy_cb_ext};\n", forceUG, pathtocalchep,nvars, nfunc, nin,nout,subproc_sq); writeF("\nCalcHEP_interface * PtrInterface_ext=&interface_ext;\n"); outFileClose(); outFileOpen("%sresults%csqme.c",pathtouser,f_slash); labl(); writeF("#include<stdio.h>\n"); writeF("#include<math.h>\n"); writeF("#include<complex.h>\n"); writeF("#include\"num_out.h\"\n"); writeF("#include\"num_in.h\"\n"); } writeF("static int calcall[%d];\n",subproc_sq+1); { writeF("static int particles[%d]={0",1+nin+nout); for(i=0;i<nin+nout;i++) writeF(",0"); writeF("};\n"); } writeF("extern DNN "); for(i=1;i<subproc_sq;i++) writeF("S%d_ext,",i); writeF("S%d_ext;\n",subproc_sq); writeF("static DNN * darr[%d]={",subproc_sq); for(i=1;i<subproc_sq;i++) writeF("&S%d_ext,",i); writeF("&S%d_ext};\n",subproc_sq); fseek(catalog,0,SEEK_END); ndiagrtot = ftell(catalog)/sizeof(catrec); writesubroutineinit(); { make_infbasis(); writeF("#include\"sqme.inc\"\n"); outFileClose(); } diagrcount = 0; inftmp = inf; init_stat(); for (nsub = 1,dfirst=1; nsub <= subproc_sq; nsub++) { int colors[MAXINOUT]; if (inftmp->tot != 0) /* this subprocess IN archive */ { for(i=0;i<nin+nout;i++) { int l; locateinbase(inftmp->p_name[i], &l); colors[i]=prtclbase[l-1].cdim; } for(i=0;i<nin; i++) if(colors[i]==3) colors[i]=-3; else if(colors[i]==-3) colors[i]=3; if(noCChain) for(i=0;i<nin+nout; i++) colors[i]=1; infCbases(nin+nout,colors,&nC,&cBasisPower,&cChains); if(cBasisPower) { cCoefN=malloc(cBasisPower*sizeof(long)); cCoefD=malloc(cBasisPower*sizeof(long)); } writesubprocess(nsub,dfirst,inftmp->tot, &breaker); dfirst+=inftmp->tot; if (breaker) goto exi; if(cBasisPower) { if(cChains){free(cChains); cChains=NULL;} free(cCoefN); free(cCoefD); } } else writesubprocess(nsub,dfirst,0, NULL); inftmp = inftmp->next; } exi: clearstatistic(); release_(&heapbeg); return !breaker; }
static int* makeCperm(int ntot,int*np,int*perm) { int i,bPow,nc; int pc[MAXINOUT]; int *chains; int * res; for(i=0;i<ntot;i++) { pc[i]=prtclbase[np[i]-1].cdim; if(i<nin && pc[i]!=1 && pc[i]!=8) pc[i]*=-1; } bPow=infCbases(ntot,pc,&nC,&chains); //printf(" Ibasis: "); for(i=0;i<bPow*nC*4;i++) printf("%d ",chains[i]); printf("\n"); res=malloc(sizeof(int)*(bPow+1)); res[0]=bPow; if(bPow>0) { int*chains2=malloc(sizeof(int)*nC*bPow*4); memcpy(chains2,chains,nC*bPow*4*sizeof(int)); { int j,k,l; for(k=0;k<4*nC*bPow;k++) if(k%4 && chains2[k]) chains2[k]=perm[chains2[k]-1]+1; //printf(" Pbasis: "); for(i=0;i<bPow*nC*4;i++) printf("%d ",chains2[i]); printf("\n"); for(l=0;l<bPow*nC;l++) { int * c=chains2+4*l; if(abs(c[0])==3) { int b; if(c[1]>c[2]) { b=c[1];c[1]=c[2];c[2]=b;} if(c[2]>c[3]) { b=c[2];c[2]=c[3];c[3]=b;} if(c[1]>c[2]) { b=c[1];c[1]=c[2];c[2]=b;} if(c[2]>c[3]) { b=c[2];c[2]=c[3];c[3]=b;} } } for(l=0;l<bPow;l++) { int l2; int * c=chains2+4*l*nC; k=0; while(k<nC-1) if(gt4(c+4*k,c+4*k+4) ) { int buff[4]; memcpy(buff, c+4*k, 4*sizeof(int)); memcpy(c+4*k, c+4*k+4,4*sizeof(int)); memcpy(c+4*k+4,buff, 4*sizeof(int)); if(k>0) k--;else k++; } else k++; for(l2=0;l2<bPow;l2++) if(memcmp(chains+4*nC*l2,c,4*nC*sizeof(int))==0) { res[l+1]=l2+1; break; } if(l2==bPow) fprintf(stderr,"Can not construct permutation\n"); } //printf(" Sbasis: "); for(i=0;i<bPow*nC*4;i++) printf("%d ",chains2[i]); printf("\n"); } free(chains2); } return res; }