Exemplo n.º 1
0
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");    
}
Exemplo n.º 2
0
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);   
}
Exemplo n.º 3
0
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,"
          "&gtwidth_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;
}
Exemplo n.º 4
0
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;
}