static void make_pinf(void) { int i; writeF("char * pinf_ext(int nsub,int nprtcl,REAL* pmass,int * num)\n{\n"); writeF("int n;\n"); writeF(" static char *names[%d][%d] ={\n",subproc_sq,nin + nout); inftmp = inf; for (nsub = 1; nsub <= subproc_sq; nsub++) { writeF("{"); for (i = 1; i <= nin + nout; i++) { if(i!=1) writeF(","); writeF("\"%s\"",inftmp->p_name[i-1]); } if (nsub== subproc_sq) writeF("}};\n"); else writeF("},\n"); inftmp = inftmp->next; } writeF("int const nvalue[%d][%d]={\n",subproc_sq,nin + nout); inftmp = inf; for (nsub = 1; nsub <= subproc_sq; nsub++) { writeF("{"); for (i = 1; i <= nin + nout; i++) { int k=inftmp->p_masspos[i-1]; if(k) { if(vararr[k].used) sscanf(vararr[k].alias,"V[%d]",&k); else k=-1; } if(i!=1) writeF(","); writeF("%d",k); } if (nsub== subproc_sq) writeF("}};\n"); else writeF("},\n"); inftmp = inftmp->next; } writeF("int const pcode[%d][%d]={\n",subproc_sq,nin + nout); inftmp = inf; for (nsub = 1; nsub <= subproc_sq; nsub++) { writeF("{"); for (i = 0; i < nin + nout; i++) { if(i) writeF(","); writeF("%d",inftmp->p_code[i]); } if (nsub== subproc_sq) writeF("}};\n"); else writeF("},\n"); inftmp = inftmp->next; } writeF("if (nsub<0 ||nsub>%d||nprtcl<0||nprtcl>%d) return NULL;\n", subproc_sq,nin + nout); writeF("if(pmass)\n{\n"); writeF(" n=nvalue[nsub-1][nprtcl-1];\n"); writeF(" if (n==0) *pmass=0; else *pmass=va_ext[n];\n"); writeF(" if (*pmass<0) (*pmass)=-(*pmass);\n"); writeF("}\n"); writeF("if(num)*num=pcode[nsub-1][nprtcl-1];\n"); writeF("return names[nsub-1][nprtcl-1];\n}\n"); if(nin==1) writeF("char * polarized_ext[3]={\"\",\"\",\"\"};\n"); else { writeF("char * polarized_ext[3]={\"\",\","); for (i = 1; i <= nparticles; i++) if(polarized(1,i)) writeF("%s,",prtclbase1[i].name); writeF("\",\","); for (i = 1; i <= nparticles; i++) if(polarized(2,i)) writeF("%s,",prtclbase1[i].name); writeF("\"};\n"); } writeF("int pinfAux_ext(int nsub,int nprtcl,int*spin2,int*color,int*neutral)\n{\n"); /* writeF("int n;\n"); */ writeF("int const pcode[%d][%d]={\n",subproc_sq,nin + nout); inftmp = inf; for (nsub = 1; nsub <= subproc_sq; nsub++) { writeF("{"); for (i = 0; i < nin + nout; i++) { if(i) writeF(","); writeF("%d",inftmp->p_code[i]); } if (nsub== subproc_sq) writeF("}};\n"); else writeF("},\n"); inftmp = inftmp->next; } writeF("int const Spin2[%d][%d]={\n",subproc_sq,nin + nout); inftmp = inf; for (nsub = 1; nsub <= subproc_sq; nsub++) { writeF("{"); for (i = 0; i < nin + nout; i++) { int pos; if(i) writeF(","); locateinbase(inftmp->p_name[i], &pos); writeF("%d",prtclbase1[pos].spin); } if (nsub== subproc_sq) writeF("}};\n"); else writeF("},\n"); inftmp = inftmp->next; } writeF("int const Color[%d][%d]={\n",subproc_sq,nin + nout); inftmp = inf; for (nsub = 1; nsub <= subproc_sq; nsub++) { writeF("{"); for (i = 0; i < nin + nout; i++) { int pos; if(i) writeF(","); locateinbase(inftmp->p_name[i], &pos); writeF("%d",prtclbase1[pos].cdim); } if (nsub== subproc_sq) writeF("}};\n"); else writeF("},\n"); inftmp = inftmp->next; } writeF("int const Neutral[%d][%d]={\n",subproc_sq,nin + nout); inftmp = inf; for (nsub = 1; nsub <= subproc_sq; nsub++) { writeF("{"); for (i = 0; i < nin + nout; i++) { int pos; if(i) writeF(","); locateinbase(inftmp->p_name[i], &pos); if(pos==prtclbase1[pos].anti) writeF("1"); else writeF("0"); } if (nsub== subproc_sq) writeF("}};\n"); else writeF("},\n"); inftmp = inftmp->next; } writeF("if(nsub<0 ||nsub>%d||nprtcl<0||nprtcl>%d) return 0;\n", subproc_sq,nin + nout); writeF("if(spin2) *spin2=Spin2[nsub-1][nprtcl-1];\n"); writeF("if(color) *color=Color[nsub-1][nprtcl-1];\n"); writeF("if(neutral) *neutral=Neutral[nsub-1][nprtcl-1];\n"); writeF("return pcode[nsub-1][nprtcl-1];\n}\n"); }
static num energy(const densvars<num> &d) { return 0.5*(d.a*polarized(d.a,d.gaa,d.lapa,2*d.taua) + d.a*polarized(d.b,d.gbb,d.lapb,2*d.taub)); }