Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
static void stomperosc_init(gen_ptr g)
{
    g->data = malloc(sizeof(stomperosc_data_t));
    assign_double(g, 1, 1.0); //set shape to 1.0
}