Beispiel #1
0
int main(int argv, char**argc)
{
  char fname[200];
  int i,nLn,L;
  FILE*f;  
  int nVar=0,nFunc=0,first; 
  char path[200];
  
  if(argv!=3) { printf("Arguments expected: 1)path to model files; 2) model number.\n"); return 1;}

  sscanf(argc[1],"%s",path);
  if(sscanf(argc[2],"%d",&L)!=1) { printf("Second argument should be a number\n"); return 1;}
  readModelFiles(path,L);
  
  if(!loadModel(0,1)) {printf("Error in model\n"); return 3;}
  f=fopen("VandP.c","w");  
  fprintf(f,"#include <stdio.h>\n");
  fprintf(f,"#include <math.h>\n");
  fprintf(f,"#include \"V_and_P.h\"\n");
  fprintf(f,"extern int  FError;\n");  


  for(nLn=0,i=0;i<nparticles;i++)
     if(!strchr("*cCtTf",prtclbase[i].hlp)&&i+1<=prtclbase[i].anti)nLn++;

  fprintf(f,"int nModelParticles=%d;\n",nLn);
  fprintf(f,"ModelPrtclsStr ModelPrtcls[%d]=\n{\n",nLn);

  for(nLn=0,i=0;i<nparticles;i++) if(!strchr("*fcCtT",prtclbase[i].hlp))
  { int anti=prtclbase[i].anti; 
    if(i+1>anti)  continue;
    if(nLn)fprintf(f,","); else fprintf(f," "); nLn++; 
      fprintf(f," {\"%s\",",prtclbase[i].name);
      if(i+1==anti)   fprintf(f,"\"%s\", ",prtclbase[i].name);
           else       fprintf(f,"\"%s\", ",prtclbase[anti-1].name);
     fprintf(f,"%ld, \"%s\",\"%s\",%d,%d,%d}\n",
       prtclbase[i].N,  prtclbase[i].massidnt, prtclbase[i].imassidnt,  
       prtclbase[i].spin, prtclbase[i].cdim,prtclbase[i].q3);
  }
  fprintf(f,"};\n");

  if (vararr) free(vararr);
  vararr = (singlevardescription*)m_alloc((nCommonVars+1)
                                            * sizeof(singlevardescription));

  for(i=0;i<=nCommonVars;i++)
  {  if(i==0 || strcmp(modelvars[i].varname,"i")==0) 
     { sprintf(vararr[i].alias,"XXX");
       vararr[i].tmpvalue=0;
       vararr[i].num=0;
       vararr[i].used = 0;
     }else
     { sprintf(vararr[i].alias,"V[%d]",nVar+nFunc);
       vararr[i].tmpvalue=modelvars[i].varvalue;
       vararr[i].num=nVar+nFunc;
       vararr[i].used = 1;
       if(modelvars[i].func) nFunc++; else nVar++;
     }
  }

  fprintf(f,"int nModelVars=%d;\n",nVar);
  fprintf(f,"int nModelFunc=%d;\n",nFunc);
  fprintf(f,"char*varNames[%d]={\n ", nVar+nFunc);
 
  for(first=1,i=0;i<=nCommonVars;i++) if(vararr[i].used) 
  { if(first)  first=0;else fprintf(f,",");
    fprintf(f,"\"%s\"\n",modelvars[i].varname);
  }
  fprintf(f,"};\n");
  fprintf(f,"double varValues[%d]={\n ", nVar+nFunc);
  for(first=1,i=0;i<=nCommonVars;i++) if(vararr[i].used) 
  { if(first)  first=0;else fprintf(f,",");
    fprintf(f,"%E\n",modelvars[i].varvalue);
  }
  fprintf(f,"};\n");

/*static void  writesubroutineinit(void) */

  fprintf(f,"#include\"extern.h\"\n");
  ext_h=fopen("extern.h","w");
  readEXTFunc(ext_h);
  fprintf(f,"int calcMainFunc(void)\n{\n");
  fprintf(f," FError=0;\n");
  fprintf(f," double *V=varValues;\n");
  for(i=1;i<=nCommonVars;i++)
  {
  
     if (vararr[i].used &&  modelvars[i].func)
     { checkNaN=0;
        { char * ss=(char *)readExpression(modelvars[i].func,rd_c,act_c,free);
           fprintf(f,"   %s=%s;\n",vararr[i].alias,ss+3);
           free(ss);
        }        
        if(checkNaN)
        fprintf(f,"   if(!finite(%s) || FError) return %d;\n",vararr[i].alias,vararr[i].num); 
     }     
  }

  fprintf(f,"return 0;\n}\n");
  fclose(ext_h);

  fclose(f);
  return 0;
}
Beispiel #2
0
int main(int argv, char**argc)
{
  int i,i10,nv,nLn,L;
  FILE*f,*fExt;  
  int nVar=0,nFunc=0,first; 
  char path[200];
  char * CalcHEP=NULL;
  
  if(argv!=3) { printf("Arguments expected: 1)path to model files; 2) model number.\n"); return 1;}

  L=strlen(argc[0]);
  CalcHEP=malloc(L+10);
  strcpy(CalcHEP,argc[0]);
  CalcHEP[L-15]=0;
  sscanf(argc[1],"%s",path);
  if(sscanf(argc[2],"%d",&L)!=1) { printf("Second argument should be a number\n"); return 1;}

  readModelFiles(path,L);
  if(!loadModel(0,1)) {printf("Error in model\n"); return 3;}


  f=fopen("VandP.c","w");
  fprintf(f,"#include <stdio.h>\n");
  fprintf(f,"#include <stdlib.h>\n");
  fprintf(f,"#include <string.h>\n");
  fprintf(f,"#include \"%s/include/extern.h\"\n", CalcHEP);
  fprintf(f,"#include \"%s/include/V_and_P.h\"\n",CalcHEP);
  fprintf(f,"#include \"autoprot.h\"\n");
  fprintf(f,"extern int  FError;\n");  

  if(EXTFunc) free(EXTFunc);
  EXTFunc=malloc(2); EXTFunc[0]=' '; EXTFunc[1]=0;
  sprintf(CalcHEP+strlen(CalcHEP),"/include/extern.h");  
  fExt=fopen(CalcHEP,"r");
  readEXTFunc(fExt);
  fclose(fExt);
  readModelFunc(f);
  ext_h=fopen("autoprot.h","w");

  for(nLn=0,i=0;i<nparticles;i++)
     if(!strchr("*fcCtT",prtclbase[i].hlp)&&i+1<=prtclbase[i].anti)nLn++;

  fprintf(f,"int nModelParticles=%d;\n",nLn);
  fprintf(f,"ModelPrtclsStr ModelPrtcls[%d]=\n{\n",nLn);

  for(nLn=0,i=0;i<nparticles;i++) if(!strchr("*fcCtT",prtclbase[i].hlp))
  { int anti=prtclbase[i].anti; 
    if(i+1>anti)  continue;
    if(nLn)fprintf(f,","); else fprintf(f," "); nLn++; 
      fprintf(f," {\"%s\",",prtclbase[i].name);
      if(i+1==anti)   fprintf(f,"\"%s\", ",prtclbase[i].name);
           else       fprintf(f,"\"%s\", ",prtclbase[anti-1].name);
     fprintf(f,"%ld, \"%s\",\"%s\",%d,%d,%d}\n",
       prtclbase[i].N,  prtclbase[i].massidnt, prtclbase[i].imassidnt,  
       prtclbase[i].spin, prtclbase[i].cdim,prtclbase[i].q3);
    
  }
  fprintf(f,"};\n");

  if (vararr) free(vararr);
  vararr = (singlevardescription*)m_alloc((nCommonVars+1)
                                            * sizeof(singlevardescription));

  sprintf(vararr[0].alias,"XXX");
  vararr[0].tmpvalue=vararr[0].num=vararr[0].used = 0;

  for(i=1;i<=nCommonVars;i++)
  {  if(strcmp(modelvars[i].varname,"i")==0) 
     { sprintf(vararr[i].alias,"I");
       vararr[i].tmpvalue=0;
       vararr[i].num=0;
       vararr[i].used = 0;
     }else
     { sprintf(vararr[i].alias,"V[%d]",nVar+nFunc);
       vararr[i].tmpvalue=modelvars[i].varvalue;
       vararr[i].num=nVar+nFunc;
       vararr[i].used = 1;
       if(modelvars[i].func) nFunc++; else nVar++;
     }
  }

  fprintf(f,"int nModelVars=%d;\n",nVar);
  fprintf(f,"int nModelFunc=%d;\n",nFunc);
  fprintf(f,"int LastVar=%d;\n",nVar);
  fprintf(f,"char*varNames[%d]={\n ", nVar+nFunc);
 
  for(first=1,i10=0, i=0;i<=nCommonVars;i++) if(vararr[i].used) 
  { if(first)  first=0; else fprintf(f,",");
    fprintf(f,"\"%s\"",modelvars[i].varname);
    if(++i10==10) {fprintf(f,"\n"); i10=0;}
  }
  fprintf(f,"};\n");
  fprintf(f,"double varValues[%d]={\n ", nVar+nFunc);
  for(first=1,nv=0,i10=0,i=0 ;i<=nCommonVars;i++) if(vararr[i].used) 
  { if(first)  first=0;else fprintf(f,",");
    fprintf(f,"%14.6E",modelvars[i].varvalue);
    if(++i10==10) { fprintf(f,"\n"); i10=0; }
    if(++nv==nVar) break;
  }
  fprintf(f,"};\n");
  

  fprintf(f,"int calcMainFunc(void)\n{\n");
  fprintf(f,"   int i;\n");
  fprintf(f,"   static double * VV=NULL;\n");
  fprintf(f,"   static int iQ=-1;\n");
  fprintf(f,"   static int cErr=0;\n");
  fprintf(f,"   double *V=varValues;\n");
  fprintf(f,"   FError=0;\n");
  fprintf(f,"   if(VV&&!cErr)\n"); 
  fprintf(f,"   { for(i=0;i<nModelVars;i++) if(i!=iQ && VV[i]!=V[i]) break;\n");
  fprintf(f,"     if(i==nModelVars) ");

  if(depQ1<=nCommonVars)
  { 
    fprintf(f,"     {if(iQ>=0 && VV[iQ]!=V[iQ]) goto FirstQ; else return 0;} \n");
  } else fprintf(f,"    return 0;\n");
  
  fprintf(f,"   }\n");
  
/*  fprintf(f," printf(\" callMainFunc\\n\");\n");  */

  fprintf(f,"  cErr=1;\n");
  for(i=1;i<=nCommonVars;i++)
  {
     if (vararr[i].used &&  modelvars[i].func)
     { checkNaN=0;
if(i==depQ1) fprintf(f," FirstQ:\n  cErr=1;\n");     
        {  char * ss=(char *)readExpression(modelvars[i].func,rd_c,act_c,free);
           fprintf(f,"   %s=%s;\n",vararr[i].alias,ss+3);
           free(ss);
           fprintf(f," LastVar=%d; ",vararr[i].num);
        }
        if(checkNaN)
        fprintf(f,"   if(!finite(%s) || FError) return %d;\n",vararr[i].alias,vararr[i].num);
        else fprintf(f,"\n");
     }
  }

  fprintf(f,"   if(VV==NULL) \n");
  fprintf(f,"   {  VV=malloc(sizeof(double)*nModelVars);\n");
  fprintf(f,"      for(i=0;i<nModelVars;i++) if(strcmp(varNames[i],\"Q\")==0) iQ=i;\n");
  fprintf(f,"   }\n");
  fprintf(f,"   for(i=0;i<nModelVars;i++) VV[i]=V[i];\n");
  fprintf(f,"   cErr=0;\n");
  fprintf(f,"return 0;\n}\n");


  fclose(f);
  fclose(ext_h);
  return 0;
}