コード例 #1
0
ファイル: dynamic_cs.c プロジェクト: innisfree/superpy
static numout* loadLib(void* handle, char * lib)
{ numout * cc=malloc(sizeof(numout));
  char name[100];
  if(!handle) {free(cc); return NULL;}   
  cc->handle=handle;
  sprintf(name,"interface_%s",lib);
  cc->interface=newSymbol(handle, name);
  if(!cc->interface || cc->interface->nprc==0){free(cc); return NULL;}
  else
  {  int i;
     cc->init=0;
     cc->Q=NULL, cc->SC=NULL;
     cc->link=malloc(sizeof(double*)*(1+cc->interface->nvar));
     cc->link[0]=NULL;
     for(i=1;i<=cc->interface->nvar;i++) 
     { char *name=cc->interface->varName[i];
       cc->link[i]=varAddress(name);
if(cc->link==NULL) printf("No link for %s\n",name);       
       if(strcmp(name,"Q")==0) cc->Q=cc->interface->va+i; 
       else if(strcmp(name,"SC")==0) cc->SC=cc->interface->va+i;
     }  
     *(cc->interface->aWidth)=&aWidth;
  }
  return cc;
}
コード例 #2
0
ファイル: dynamic_cs.c プロジェクト: jotadram6/micrOMEGAs
int findVal(char * name, double * val)
{
  double * va=varAddress(name);
  if(va)
  {  
    if(va > varValues+LastVar)return 2;
     *val=*va; return 0; 
  } else return 1;   
}
コード例 #3
0
ファイル: vp.c プロジェクト: Omer80/wimps
double pMass(char * name)
{
  char *nm;
  int n=pTabPos(name);
  if(!n){printf("Wrong particle name '%s'\n",name); return 0;}
  nm=ModelPrtcls[abs(n)-1].mass;
  if(nm[0]=='0') return 0; else 
  { REAL *ma=varAddress(nm);
    return fabs(*ma);
  }
}
コード例 #4
0
int m_epa__(int i, int * pString)
{   
    void * pscr = NULL;
    i--;
    for(;;)
    { char mstr[]="\007"
                  "mu^-   "
                  "e^-    "
                  "e^+    "
                  "mu^+   ";


      char strmen[]="\050"
      " Incoming particle XXX                  "
      " |Q|max = ZZZ                           ";
      int mode=1;
      int n;
      if(pc[i]<0) n=3+pc[i]; else n=2+pc[i];
   
      improveStr(strmen,"XXX","%4.4s",mstr+1+(n-1)*mstr[0]);
      improveStr(strmen,"ZZZ","%s GeV",q_max_txt[i]);
      menu1(38,10,"",strmen, "n_sf_epa",&pscr,&mode);
    
      switch(mode)
      {
      case 0: { double v;
                if(1==sscanf(q_max_txt[i],"%lf",&v))
                {  
                   q_max_val[i]=v;
                   q_max_ptr[i]=q_max_val+i;
                   return 1;
                } else 
                { trim(q_max_txt[i]);
                  q_max_ptr[i]=varAddress(q_max_txt[i]);
                  if(!q_max_ptr[i]) 
                  { char buff[50];
                    sprintf(buff,"Can not find parameter '%s'",q_max_txt[i]);
                    continue;   
                  }
                }
                return 1;
              }      
      
      case 1: menu1(38,13,"",mstr,"",NULL,&n);
              if(n<3) pc[i]=n-3; else pc[i]=n-2; 
              break;
      case 2: correctStr (40,16,"Enter new value ",q_max_txt[i],19,1);
 break;
      }
    }
    return 1;     
}
コード例 #5
0
ファイル: omega.c プロジェクト: cbpark/twoscale_softsusy
static double * paramAddress(char * name)
{
  int k,k0;
  char ** f;
  double * res=varAddress(name);
  if(res)  return res; 

  if(mainChan)
  {                                                                              
    CalcHEP_interface * ci=mainChan->interface; 
    k0=ci->nvar+1;
    f=ci->varName+k0;
  
    for(k=0; k<ci->nfunc;k++) 
      if(strcmp(name, f[k])==0) return ci->va+k+k0; 
  }
  return NULL;
}
コード例 #6
0
int r_epa__(int i, char *name)
{
  char pname[10];
  double v;
  i--;
  if(2!= sscanf(name,
    "Equiv.Photon(particle= %s |Q|max= %[^)]",pname,q_max_txt[i])) return 0;
  trim(q_max_txt[i]);  
  if(1==sscanf(q_max_txt[i],"%lf",&v))
  {  
     if (v <= 0.) return 0;
     q_max_val[i]=v;
     q_max_ptr[i]=q_max_val+i;  
  } else 
  { q_max_ptr[i]=varAddress(q_max_txt[i]);
    if(!q_max_ptr[i]) return 0;
  }
       if(strcmp(pname,"mu^-")==0) pc[i]=-2;
  else if(strcmp(pname,"e^-") ==0) pc[i]=-1;
  else if(strcmp(pname,"e^+") ==0) pc[i]= 1;
  else if(strcmp(pname,"mu^+")==0) pc[i]= 2;
  else return 0;   
  return 1;
}
コード例 #7
0
ファイル: umssm_params.c プロジェクト: restrepo/DMLR-Toolbox
int assignValFunc(char * name, double val)
{
  double * a=varAddress(name);
  if(a && a<=varValues+nModelVars+nModelFunc )  {*a=val; return 0;} else {printf(" %s not found\n", name);return 1;}
}
コード例 #8
0
int findVal(char * name, double * val)
{
  double * va=varAddress(name); 
  if(va){*val=*va; return 0;} else  return 1;  
}
コード例 #9
0
int assignVal(char * name, double val)
{
  double * a=varAddress(name);
  if(a && a<=varValues+nModelVars )  {*a=val; return 0;} else return 1;
}
コード例 #10
0
int assignVal(char * name, double val)
{
  double * a=varAddress(name);
  if(a)  {*a=val; return 0;} else return 1;
}
コード例 #11
0
ファイル: omega.c プロジェクト: jotadram6/micrOMEGAs
static int testSubprocesses(void)
{
 static int first=1;
 int err,k1,k2,i,j;
 double *Q;
 double *GG;
 if(first)
 {
    first=0;
    if(createTableOddPrtcls())
    { printf("The model contains uncoupled odd patricles\n"); exit(10);}

    for(i=0,NC=0;i<Nodd;i++,NC++) 
        if(strcmp(OddPrtcls[i].name,OddPrtcls[i].aname))NC++;
        
    inP=(char**)malloc(NC*sizeof(char*));
    inAP=(int*)malloc(NC*sizeof(int));
    inG=(int*)malloc(NC*sizeof(int));
    inDelta=(double*)malloc(NC*sizeof(double)); 
    inG_=(double*)malloc(NC*sizeof(double));
    inMassAddress=(double**)malloc(NC*sizeof(double*));
    inMass=(double*)malloc(NC*sizeof(double));
    inNum= (int*)malloc(NC*sizeof(int));
    sort=(int*)malloc(NC*sizeof(int));

    code22=(numout**)malloc(NC*NC*sizeof(numout*));
    inC=(int*)malloc(NC*NC*sizeof(int)); 

      
    for(i=0,j=0;i<Nodd;i++)
    {  
       inP[j]=OddPrtcls[i].name;
       inNum[j]=OddPrtcls[i].NPDG;
       inG[j]=(OddPrtcls[i].spin2+1)*OddPrtcls[i].cdim;
       if(strcmp(OddPrtcls[i].name,OddPrtcls[i].aname))
       {
         inAP[j]=j+1;
         j++;
         inP[j]=OddPrtcls[i].aname;
         inG[j]=inG[j-1];
         inAP[j]=j-1;
         inNum[j]=-OddPrtcls[i].NPDG;
       } else inAP[j]=j;
       j++;
    }

    for(i=0;i<NC;i++) sort[i]=i;
    for(k1=0;k1<NC;k1++) for(k2=0;k2<NC;k2++) inC[k1*NC+k2]=-1;
    for(k1=0;k1<NC;k1++) for(k2=0;k2<NC;k2++) if(inC[k1*NC+k2]==-1)
    {  int kk1=inAP[k1];
       int kk2=inAP[k2];
       inC[k1*NC+k2]=1;
       if(inC[k2*NC+k1]==-1)   {inC[k2*NC+k1]=0;   inC[k1*NC+k2]++;}
       if(inC[kk1*NC+kk2]==-1) {inC[kk1*NC+kk2]=0; inC[k1*NC+k2]++;}
       if(inC[kk2*NC+kk1]==-1) {inC[kk2*NC+kk1]=0; inC[k1*NC+k2]++;}
    }

    for(k1=0;k1<NC;k1++) for(k2=0;k2<NC;k2++) code22[k1*NC+k2]=NULL;

    for(i=0,j=0;i<Nodd;i++)
    {
       inMassAddress[j]=varAddress(OddPrtcls[i].mass);
       if(!inMassAddress[j]) 
       { if(strcmp(OddPrtcls[i].mass ,"0")==0)
         { printf("Error: odd particle '%s' has zero mass.\n",OddPrtcls[i].name);
           exit(5);
         }  
         printf(" Model is not self-consistent:\n "
                " Mass identifier '%s' for particle '%s' is absent  among parameetrs\n",OddPrtcls[i].mass, OddPrtcls[i].name);
         exit(5);
       }

       if(strcmp(OddPrtcls[i].name,OddPrtcls[i].aname))
       {
         j++;
         inMassAddress[j]=inMassAddress[j-1];
       }
       j++;
    }
  }

  for(Q=NULL,GG=NULL,i=0;i<nModelVars;i++)  
  { if(strcmp(varNames[i],"Q")==0) Q=varValues+i;
    else if(strcmp(varNames[i],"GG")==0) GG=varValues+i;
  }  
  if(Q) *Q=100;
 
 err=calcMainFunc();
 if(err>0) return err;

 Mcdm=fabs(*(inMassAddress[0]));
 for(i=0;i<NC;i++) 
 { inMass[i]=fabs(*(inMassAddress[i]));
   if(Mcdm>inMass[i]) Mcdm=inMass[i];
 }

 if(Q) 
 { *Q=2*Mcdm;
    assignVal("Q",2*Mcdm);
    err=calcMainFunc();
    if(err>0) return err;
 }
 if(GG) *GG=parton_alpha(2*Mcdm/3.);
            
 for(i=0; i<NC-1;)
 { int i1=i+1;
   if(inMass[sort[i]] > inMass[sort[i1]])
   { int c=sort[i]; sort[i]=sort[i1]; sort[i1]=c;
     if(i) i--; else i++;
   } else i++;
 }

 LSP=sort[0];
 Mcdm=inMass[LSP];

 for(i=0;i<NC;i++)
 { inDelta[i]= (inMass[i]-Mcdm)/Mcdm;
   inG_[i]=inG[i]*pow(1+inDelta[i],1.5);
 }

  for(k1=0;k1<NC;k1++)  for(k2=0;k2<NC;k2++) if(code22[k1*NC+k2]) code22[k1*NC+k2]->init=0;
  cleanDecayTable();
return 0;
}