コード例 #1
0
ファイル: mi.c プロジェクト: cran/rsgcc
int make_mi(mi_t* const m, const int n, const int k) {
  if (n < k) return 0;

  m->k = k;
  m->n = n;
  init_psi(m);
  m->sxs  = Calloc(n, coord_t);
  m->xiis = Calloc(n, int);
  m->sys  = Calloc(n, coord_t);
  m->yiis = Calloc(n, int);

  return 1;
}
コード例 #2
0
ファイル: imf.c プロジェクト: AtomyChan/JLU-python-code
int imf_init_multi_power(IMF *imf,int n,double *m,double *alpha)
{
  int i;
  imf->n = n;
  imf->k = 1;
  imf->m_max_physical = IMF_MASSINF;
  imf->m_cl = 0;
 
  imf->m = (double *) malloc((imf->n+1) * sizeof(double));
  imf->f = (double(**)(double,double *)) 
    malloc((imf->n+1) * sizeof(double(*)(double,double *)));
  imf->mf = (double(**)(double,double *)) 
    malloc((imf->n+1) * sizeof(double(*)(double,double *)));
  imf->F = (double(**)(double,double *)) 
    malloc((imf->n+1) * sizeof(double(*)(double,double *)));
  imf->mF = (double(**)(double,double *)) 
    malloc((imf->n+1) * sizeof(double(*)(double,double *)));
  imf->invF = (double(**)(double,double *)) 
    malloc((imf->n+1) * sizeof(double(*)(double,double *)));
  imf->a_f = (double **) malloc((imf->n+1) * sizeof(double*));
  imf->a_mf = (double **) malloc((imf->n+1) * sizeof(double*));
  imf->a_F = (double **) malloc((imf->n+1) * sizeof(double*));
  imf->a_mF = (double **) malloc((imf->n+1) * sizeof(double*));
  imf->a_invF = (double **) malloc((imf->n+1) * sizeof(double*));
  imf->m[0] = m[0];
  for(i=1;i<=imf->n;i++)
    {
      imf->f[i] = &imf_power;
      imf->mf[i] = &imf_power;
      imf->F[i] = &imf_prim_power;
      imf->mF[i] = &imf_prim_power;
      imf->invF[i] = &imf_inv_prim_power;
      imf->a_f[i] = (double *) malloc(PARA_MAX * sizeof(double));
      imf->a_mf[i] = (double *) malloc(PARA_MAX * sizeof(double));
      imf->a_F[i] = (double *) malloc(PARA_MAX * sizeof(double));
      imf->a_mF[i] = (double *) malloc(PARA_MAX * sizeof(double));
      imf->a_invF[i] = (double *) malloc(PARA_MAX * sizeof(double));
      imf->m[i] = m[i];
      imf->a_f[i][0] = alpha[i-1];
      imf->a_mf[i][0] = alpha[i-1]+1;
      imf->a_F[i][0] = alpha[i-1];
      imf->a_mF[i][0] = alpha[i-1]+1;
      imf->a_invF[i][0] = alpha[i-1];
   }
  init_psi(imf);
  return 0;
}
コード例 #3
0
ファイル: imf.c プロジェクト: AtomyChan/JLU-python-code
int imf_init_user(IMF *imf,char *imf_string_original){

  int n,i;
  double value;
  double value2;
  char *pos;
  char *seg_pos;
  char * imf_string;
  char *parameter;
  char *segment;
  char *function;

  segment = (char *) malloc((strlen(imf_string_original)+1)*sizeof(char));
  parameter = (char *) malloc((strlen(imf_string_original)+1)*sizeof(char));
  imf_string = (char *) malloc((strlen(imf_string_original)+1)*sizeof(char));
  function = (char *) malloc((strlen(imf_string_original)+1)*sizeof(char));
  strcpy(imf_string,imf_string_original);

  n = 0;
  pos = imf_string; 


  /** count bracketts **/
  
  while((*pos) != 0){
    if((*pos) == '(')
      n++;
    pos++;
  }
  
  imf->n = n;
  imf->k = 1.;
  imf->m_max_physical = IMF_MASSINF;
  imf->m_cl = 0.;
  
  
    
  imf->m = (double *) malloc((imf->n+1) * sizeof(double));
  imf->f = (double(**)(double,double *)) 
    malloc((imf->n+1) * sizeof(double(*)(double,double *)));
  imf->a_f = (double **) malloc((imf->n+1) * sizeof(double*));
  imf->mf = (double(**)(double,double *)) 
    malloc((imf->n+1) * sizeof(double(*)(double,double *)));
  imf->a_mf = (double **) malloc((imf->n+1) * sizeof(double*));
  imf->F = (double(**)(double,double *)) 
    malloc((imf->n+1) * sizeof(double(*)(double,double *)));
  imf->a_F = (double **) malloc((imf->n+1) * sizeof(double*));
  imf->mF = (double(**)(double,double *)) 
    malloc((imf->n+1) * sizeof(double(*)(double,double *)));
  imf->a_mF = (double **) malloc((imf->n+1) * sizeof(double*));
  imf->invF = (double(**)(double,double *)) 
    malloc((imf->n+1) * sizeof(double(*)(double,double *)));
  imf->a_invF = (double **) malloc((imf->n+1) * sizeof(double*));

  for(i=1;i<=imf->n;i++){
    imf->a_f[i] = (double *) malloc(PARA_MAX * sizeof(double));
    imf->a_mf[i] = (double *) malloc(PARA_MAX * sizeof(double));
    imf->a_F[i] = (double *) malloc(PARA_MAX * sizeof(double));
    imf->a_mF[i] = (double *) malloc(PARA_MAX * sizeof(double));
    imf->a_invF[i] = (double *) malloc(PARA_MAX * sizeof(double));
  }

  pos = imf_string;
  
  pos = string_parse(pos,parameter,"(");
  imf->m[0] = assign_double(parameter);
  for(i=1;i<=imf->n;i++){
    pos = string_parse(pos,segment,")");
    pos = string_parse(pos,parameter,"(");
    imf->m[i] = assign_double(parameter);
    seg_pos = segment;
    seg_pos = string_parse(seg_pos,function,":");
    if(strcmp(function,"pow") == 0){
      seg_pos = string_parse(seg_pos,parameter,")");
      value = assign_double(parameter);
      imf->f[i] = &imf_power;
      imf->a_f[i][0] = value;
      
      imf->mf[i] = &imf_power;
      imf->a_mf[i][0] = value+1.;
      
      imf->F[i] = &imf_prim_power;
      imf->a_F[i][0] = value;

      imf->mF[i] = &imf_prim_power;
      imf->a_mF[i][0] = value+1;
      
      imf->invF[i] = &imf_inv_prim_power;
      imf->a_invF[i][0] = value;
    }
    if(strcmp(function,"log-norm") == 0){
      seg_pos = string_parse(seg_pos,parameter,":");
      value = assign_double(parameter);
      seg_pos = string_parse(seg_pos,parameter,")");
      value2 = assign_double(parameter);
      
      imf->f[i] = &imf_log_normal;
      imf->a_f[i][0] = log10(value);
      imf->a_f[i][1] = value2;
      
      imf->mf[i] = &imf_mlog_normal;
      imf->a_mf[i][0] = log10(value);
      imf->a_mf[i][1] = value2;
      
      imf->F[i] = &imf_prim_log_normal;
      imf->a_F[i][0] = log10(value);
      imf->a_F[i][1] = value2;
      
      imf->mF[i] = &imf_prim_mlog_normal;
      imf->a_mF[i][0] = log10(value);
      imf->a_mF[i][1] = value2;
      
      imf->invF[i] = &imf_inv_prim_log_normal;
      imf->a_invF[i][0] = log10(value);
      imf->a_invF[i][1] = value2;
      
    }
  }


  init_psi(imf);

  free(segment);
  free(imf_string);
  free(parameter);
  free(function);
  
  return 0;
}
コード例 #4
0
ファイル: imf.c プロジェクト: AtomyChan/JLU-python-code
int imf_init_chabrier_2003(IMF *imf){

  int i;
  
  imf->n = 2;
  imf->k = 1.;
  imf->m_max_physical = IMF_MASSINF;
  imf->m_cl = 0.;
  
    
  imf->m = (double *) malloc((imf->n+1) * sizeof(double));
  imf->f = (double(**)(double,double *)) 
    malloc((imf->n+1) * sizeof(double(*)(double,double *)));
  imf->a_f = (double **) malloc((imf->n+1) * sizeof(double*));
  imf->mf = (double(**)(double,double *)) 
    malloc((imf->n+1) * sizeof(double(*)(double,double *)));
  imf->a_mf = (double **) malloc((imf->n+1) * sizeof(double*));
  imf->F = (double(**)(double,double *)) 
    malloc((imf->n+1) * sizeof(double(*)(double,double *)));
  imf->a_F = (double **) malloc((imf->n+1) * sizeof(double*));
  imf->mF = (double(**)(double,double *)) 
    malloc((imf->n+1) * sizeof(double(*)(double,double *)));
  imf->a_mF = (double **) malloc((imf->n+1) * sizeof(double*));
  imf->invF = (double(**)(double,double *)) 
    malloc((imf->n+1) * sizeof(double(*)(double,double *)));
  imf->a_invF = (double **) malloc((imf->n+1) * sizeof(double*));
  for(i=1;i<=imf->n;i++){
    imf->a_f[i] = (double *) malloc(PARA_MAX * sizeof(double));
    imf->a_mf[i] = (double *) malloc(PARA_MAX * sizeof(double));
    imf->a_F[i] = (double *) malloc(PARA_MAX * sizeof(double));
    imf->a_mF[i] = (double *) malloc(PARA_MAX * sizeof(double));
    imf->a_invF[i] = (double *) malloc(PARA_MAX * sizeof(double));
  }
  
  
  imf->m[0] = 0.01;
  imf->m[1] = 1.0;
  imf->m[2] = IMF_MASSINF;
  
  
  imf->f[1] = &imf_log_normal;
  imf->a_f[1][0] = log10(0.079);
  imf->a_f[1][1] = 0.69;
  
  imf->mf[1] = &imf_mlog_normal;
  imf->a_mf[1][0] = log10(0.079);
  imf->a_mf[1][1] = 0.69;
  
  imf->F[1] = &imf_prim_log_normal;
  imf->a_F[1][0] = log10(0.079);
  imf->a_F[1][1] = 0.69;
  
  imf->mF[1] = &imf_prim_mlog_normal;
  imf->a_mF[1][0] = log10(0.079);
  imf->a_mF[1][1] = 0.69;

  imf->invF[1] = &imf_inv_prim_log_normal;
  imf->a_invF[1][0] = log10(0.079);
  imf->a_invF[1][1] = 0.69;

  

  imf->f[2] = &imf_power;
  imf->a_f[2][0] = -1.3-1.;

  imf->mf[2] = &imf_power;
  imf->a_mf[2][0] = imf->a_f[2][0]+1.;

  imf->F[2] = &imf_prim_power;
  imf->a_F[2][0] = imf->a_f[2][0];

  imf->mF[2] = &imf_prim_power;
  imf->a_mF[2][0] = imf->a_f[2][0]+1;

  imf->invF[2] = &imf_inv_prim_power;
  imf->a_invF[2][0] = imf->a_f[2][0];
  
  init_psi(imf);
  return 0;
}
コード例 #5
0
ファイル: simulator_omp.c プロジェクト: jdlschrock/AdiaQC
/*------------------------------------------------------------------
Main driver for the simulator
------------------------------------------------------------------*/
int main( int argc, char **argv ){
    double *hz, *hhxh;     /* hamiltonian components */
    double complex *psi;   /* State vector */
    params_t par;
    uint64_t i, *largest, j, samples, maxIdx, ccount;
    struct timeval tend, tbegin;
    double delta;
    double tempV, maxV;
    
    //gettimeofday( &tbegin, NULL );
    
    /* - - - - - - - - - - - Parse configuration file - - - - - - - - - - -*/
    //if( argc < 3 ){
    if( argc < 4 ){
        fprintf( stderr, "Need a json configuration file or json string. Terminating...\n" );
        return 1;
    }

    parse_file( argv[1][1], argv[2], &par );
    samples = atoi( argv[3] );
    
    par.dim = 1 << par.nQ;
    
    hz   = (double *)calloc( (par.dim),sizeof(double) );
    hhxh = (double *)calloc( (par.dim),sizeof(double) );
    psi  = (double complex *)malloc( (par.dim)*sizeof(double complex) );
    
    /* - - - - - - Compute the Hamiltonian for the simulation - - - - - - -*/
    build_h( &par, hz, hhxh );
    free( par.al ); free( par.be ); free( par.de );

    ccount = 0UL;
    for( i = 0; i < samples; ++i ){
        /* - - - - - - Compute the state vector for the simulation - - - - - - */
        init_psi( &par, psi );
        
        /* - - - - - - - - - - - - Run the Simulation - - - - - - - - - - - - -*/
        run_sim( &par, hz, hhxh, psi );

        /* - - - - - - - - - - - - - Check results - - - - - - - - - - - - - - */
        maxV = 0.0;
        for( j = 0UL; j < par.dim; ++j ){
            tempV = cabs( psi[j]*psi[j] );
            if( tempV > maxV ){
                maxV = tempV;
                maxIdx = j;
            }
        }
        ccount += ( maxIdx == par.res ) ? 1UL : 0UL;
    }
    printf( "%f\n", ccount/(double)samples );

    /* - - - - - - - - - - - - - Check results - - - - - - - - - - - - - - */
    /*
    largest = (uint64_t *)calloc( par.L, sizeof(uint64_t) );
    findLargest( par.dim, par.L, psi, largest );
    for( i = par.L; i --> 0; ){ //remember that i is unsigned
        //printf( "|psi[%d]| = %.8f\n",
        printf( "%d %.8f\n",
            largest[i],
            cabs( psi[largest[i]]*psi[largest[i]] ) );
    }
    */
    //statm_t res;
    //read_off_memory_status( &res );
    
    /* - - - - - - - - - - - Clean up and output - - - - - - - - - - - - - */
    //free( largest );
    free( psi );
    free( hz );
    free( hhxh );
    
    //gettimeofday( &tend, NULL );
    //delta = ((tend.tv_sec - tbegin.tv_sec)*1000000u + tend.tv_usec - tbegin.tv_usec)/1.e6;
    //printf( "Total time: %f s\n", delta );
    //printf( "Memory used: %ld kB\n", res.resident );
    
    return 0;
}