示例#1
0
int main(){
	static vec u(K+1), un(K+1);
	val dt = T/N;
	val dx = 1.0/K;
	val gam = MU*dt/(dx*dx);
	val rho = NU*dt/(dx*dx*dx*dx);
	val ar = dt/(2*dx);
	int j,n=1;

	//Initialize U
	for (j=0;j<K+1;j++) u(j)=f(j*dx);
    //printf("Initial vector\n"); vecprintf(u,K);

	val tn = n*dt;
	while (tn<=T||n<N){
		for (j=0;j<K+1;j++) un(j) = u(j) - gam*delta2(u,j) - rho*delta4(u,j) - ar*u(j)*delta0(u,j);
		for (j=0;j<K+1;j++) u(j) = un(j);
		n+=1;
		tn = n*dt;
	}
	printf("At t = 0.25 and space 0.5 the 'heat' is %24.15e\n", u(K/2)); 
	return 0;
}
void LinearQuadtreeExpansion::M2L(__uint32 source, __uint32 receiver)
{
	double* receiv_coeff = m_localExp + receiver*(m_numCoeff<<1);
	double* source_coeff = m_multiExp + source*(m_numCoeff<<1);

	const float center_x_source   = (float)m_tree.nodeX(source);
	const float center_y_source   = (float)m_tree.nodeY(source);
	const float center_x_receiver = (float)m_tree.nodeX(receiver);
	const float center_y_receiver = (float)m_tree.nodeY(receiver);

	ComplexDouble center_receiver(center_x_receiver, center_y_receiver);
	ComplexDouble center_source(center_x_source, center_y_source);
	ComplexDouble delta0(center_source - center_receiver);

	ComplexDouble delta1 = -delta0;
	ComplexDouble delta1_l(delta1);
	ComplexDouble a;
	ComplexDouble a0(source_coeff);
	ComplexDouble b;
	ComplexDouble sum;
	for (__uint32 l=1;l<m_numCoeff;l++)
	{
		b.load(receiv_coeff+(l<<1));
		sum = a0*(-1/(double)l);
		ComplexDouble delta0_k(delta0);
		for (__uint32 k=1;k<m_numCoeff;k++)
		{
			a.load(source_coeff+(k<<1));
			sum += (a*binCoef.value(l+k-1, k-1)) / delta0_k;
			delta0_k *= delta0;
		};
		
		b += sum/delta1_l;
		b.store(receiv_coeff+(l<<1));
		delta1_l *= delta1;
	};

	// b0
	b.load(receiv_coeff);
	//std::complex<double> sdelta(m_center[(receiver<<1)] - m_center[(source<<1)],  m_center[(receiver<<1)+1] - m_center[(source<<1) +1]);//, m_x[receiver] - m_x[source], m_y[receiver] - m_y[source]);
	/*std::complex<double> sdelta(center_x_receiver - center_x_source,  
								center_y_receiver - center_y_source);//, m_x[receiver] - m_x[source], m_y[receiver] - m_y[source]);
	
	if ((sdelta.real() <=0) && (sdelta.imag() == 0)) //no cont. compl. log fct exists !!!
		sdelta = log(sdelta + 0.00000001);
	else
		sdelta = log(sdelta);
	
	*/
	double r = delta1.length();//= sqrt(sdelta.real()*sdelta.real()+sdelta.imag()*sdelta.imag());
	double phi = atan((center_x_receiver - center_x_source)/(center_y_receiver - center_y_source));
	// sum = a0*log(z1 - z0)
	b += a0*ComplexDouble(log(r), phi);
	// (z1 - z0)^1
	//b += a0*ComplexDouble(sdelta.real(), sdelta.imag());
	delta1_l = delta1;
	for (__uint32 k=1;k<m_numCoeff;k++)
	{
		a.load(source_coeff+(k<<1));
		b += a/delta1_l;
		//(z1 - z0)^k
		delta1_l *= delta1;
	};
	b.store(receiv_coeff);
};
示例#3
0
文件: sm.c 项目: HEPcodes/SuperIso
int main()
{ 
	struct parameters param;
		
	Init_param(&param);
	
	slha_adjust(&param);
	param.SM=1;
	
	printf("\n");
	
	printf("SuperIso v3.4 - F. Mahmoudi\n\n");
	printf("Standard Model predictions\n\n");
	printf("Observable\t\t\tValue\n\n");

	double C0b[11],C0spec[11],C1b[11],C1spec[11],C0w[11],C1w[11],C2w[11],C2b[11],Cpb[11];
	double complex CQpb[3],CQ0b[3],CQ1b[3];
	CQ0b[1]=CQ0b[2]=CQ1b[1]=CQ1b[2]=CQpb[1]=CQpb[2]=0.;
	double obs[Nobs_BKsll+1];

	double mu_W=2.*param.mass_W;
	double mu_b=param.mass_b_pole/2.;
	CW_calculator(C0w,C1w,C2w,mu_W,&param);
	C_calculator_base1(C0w,C1w,C2w,mu_W,C0b,C1b,C2b,mu_b,&param);
	Cprime_calculator(Cpb,CQpb,mu_W,mu_b,&param);
	printf("BR(b->s gamma)\t\t\t%.3e\n",bsgamma(C0b,C1b,C2b,Cpb,mu_b,mu_W,&param));
	
	double lambda_h=0.5;
	double mu_spec=sqrt(lambda_h*mu_b);		
	C_calculator_base2(C0w,C1w,mu_W,C0b,C1b,mu_b,&param);
	C_calculator_base2(C0w,C1w,mu_W,C0spec,C1spec,mu_spec,&param);
	Cprime_calculator(Cpb,CQpb,mu_W,mu_b,&param);
	printf("delta0(B->K* gamma)\t\t%.3e\n\n",delta0(C0b,C0spec,C1b,C1spec,Cpb,&param,mu_b,mu_spec));
	
	mu_b=param.mass_b_pole;
	C_calculator_base1(C0w,C1w,C2w,mu_W,C0b,C1b,C2b,mu_b,&param);
	Cprime_calculator(Cpb,CQpb,mu_W,mu_b,&param);
	printf("BR(Bs->mu mu)\t\t\t%.3e\n",Bsmumu(C0b,C1b,C2b,CQ0b,CQ1b,Cpb,CQpb,&param,mu_b));
	printf("BR(Bs->mu mu)_untag\t\t%.3e\n",Bsmumu_untag(C0b,C1b,C2b,CQ0b,CQ1b,Cpb,CQpb,&param,mu_b));
	printf("BR(Bd->mu mu)\t\t\t%.3e\n\n",Bdmumu(C0b,C1b,C2b,CQ0b,CQ1b,&param,mu_b));

		
	printf("BR(B->K* mu mu)_low\t\t%.3e\n",BRBKstarmumu(1.,6.,obs,C0b,C1b,C2b,CQ0b,CQ1b,Cpb,CQpb,&param,mu_b));
	
	printf("AFB(B->K* mu mu)_low\t\t%.3e\n",obs[1]);
	printf("FL(B->K* mu mu)_low\t\t%.3e\n",obs[2]);
	printf("P1=AT1(B->K* mu mu)_low\t\t%.3e\n",obs[4]);
	printf("AT2(B->K* mu mu)_low\t\t%.3e\n",obs[5]);
	printf("AT3(B->K* mu mu)_low\t\t%.3e\n",obs[6]);
	printf("AT4(B->K* mu mu)_low\t\t%.3e\n",obs[7]);
	printf("AT5(B->K* mu mu)_low\t\t%.3e\n",obs[8]);
	printf("P4=HT1(B->K* mu mu)_low\t\t%.3e\n",obs[9]);
	printf("P5=HT2(B->K* mu mu)_low\t\t%.3e\n",obs[10]);
	printf("HT3(B->K* mu mu)_low\t\t%.3e\n",obs[11]);
	
	printf("P2(B->K* mu mu)_low\t\t%.3e\n",obs[14]);
	printf("P3(B->K* mu mu)_low\t\t%.3e\n",obs[15]);
	printf("P6(B->K* mu mu)_low\t\t%.3e\n",obs[16]);
	printf("P4'(B->K* mu mu)_low\t\t%.3e\n",obs[17]);
	printf("P5'(B->K* mu mu)_low\t\t%.3e\n",obs[18]);
	printf("P6'(B->K* mu mu)_low\t\t%.3e\n",obs[19]);

	printf("P8(B->K* mu mu)_low\t\t%.3e\n",obs[20]);
	printf("P8'(B->K* mu mu)_low\t\t%.3e\n",obs[21]);
	
	printf("AI(B->K* mu mu)_low\t\t%.3e\n\n",AI_BKstarmumu_lowq2(C0b,C1b,C2b,&param,mu_b));
	
	printf("BR(B->K* mu mu)_high\t\t%.3e\n",BRBKstarmumu_highq2(obs,C0b,C1b,C2b,CQ0b,CQ1b,Cpb,CQpb,&param,mu_b));

	printf("AFB(B->K* mu mu)_high\t\t%.3e\n",obs[1]);
	printf("FL(B->K* mu mu)_high\t\t%.3e\n",obs[2]);
	printf("AT1(B->K* mu mu)_high\t\t%.3e\n",obs[4]);
	printf("P1=AT2(B->K* mu mu)_high\t%.3e\n",obs[5]);
	printf("AT3(B->K* mu mu)_high\t\t%.3e\n",obs[6]);
	printf("AT4(B->K* mu mu)_high\t\t%.3e\n",obs[7]);
	printf("AT5(B->K* mu mu)_high\t\t%.3e\n",obs[8]);
	printf("P4=HT1(B->K* mu mu)_high\t%.3e\n",obs[9]);
	printf("P5=HT2(B->K* mu mu)_high\t%.3e\n",obs[10]);
	printf("HT3(B->K* mu mu)_high\t\t%.3e\n",obs[11]);
	
	printf("P2(B->K* mu mu)_high\t\t%.3e\n",obs[14]);
	printf("P3(B->K* mu mu)_high\t\t%.3e\n",obs[15]);
	printf("P6(B->K* mu mu)_high\t\t%.3e\n",obs[16]);
	printf("P4'(B->K* mu mu)_high\t\t%.3e\n",obs[17]);
	printf("P5'(B->K* mu mu)_high\t\t%.3e\n",obs[18]);
	printf("P6'(B->K* mu mu)_high\t\t%.3e\n",obs[19]);

	printf("P8(B->K* mu mu)_high\t\t%.3e\n",obs[20]);
	printf("P8'(B->K* mu mu)_high\t\t%.3e\n",obs[21]);
	
	printf("AI(B->K* mu mu)_high\t\t%.3e\n\n",AI_BKstarmumu_highq2(C0b,C1b,C2b,&param,mu_b));
		
	double smin=pow(2.*param.mass_mu,2.);
	double smax=pow(param.m_Bd-param.m_Kstar,2.)*0.999; 
	BRBKstarmumu(smin,smax,obs,C0b,C1b,C2b,CQ0b,CQ1b,Cpb,CQpb,&param,mu_b);
	printf("q0^2(AFB(B->K* mu mu))\t\t%.3e\n",obs[0]);
	printf("q0^2(AI(B->K* mu mu))\t\t%.3e\n\n",AI_BKstarmumu_zero(C0b,C1b,C2b,&param,mu_b));
	
	printf("BR(B->Xs mu mu)_low\t\t%.3e\n",BRBXsmumu_lowq2(C0b,C1b,C2b,CQ0b,CQ1b,Cpb,CQpb,&param,mu_b));
	printf("BR(B->Xs mu mu)_high\t\t%.3e\n",BRBXsmumu_highq2(C0b,C1b,C2b,CQ0b,CQ1b,Cpb,CQpb,&param,mu_b));
	printf("q0^2(AFB(B->Xs mu mu)\t\t%.3e\n",A_BXsmumu_zero(C0b,C1b,C2b,CQ0b,CQ1b,Cpb,CQpb,&param,mu_b));
	printf("BR(B->Xs tau tau)_high\t\t%.3e\n\n",BRBXstautau_highq2(C0b,C1b,C2b,CQ0b,CQ1b,Cpb,CQpb,&param,mu_b));

	
	printf("BR(B->tau nu)\t\t\t%.3e\n",Btaunu(&param));
	printf("R(B->tau nu)\t\t\t%.3e\n",RBtaunu(&param));
	printf("BR(B->D tau nu)\t\t\t%.3e\n",BDtaunu(&param));
	printf("BR(B->D tau nu)/BR(B->D e nu)\t%.3e\n",BDtaunu_BDenu(&param));
	printf("BR(Ds->tau nu)\t\t\t%.3e\n",Dstaunu(&param));
	printf("BR(Ds->mu nu)\t\t\t%.3e\n",Dsmunu(&param));
	printf("BR(D->mu nu)\t\t\t%.3e\n",Dmunu(&param));
	printf("BR(K->mu nu)/BR(pi->mu nu)\t%.3e\n",Kmunu_pimunu(&param));
	printf("Rmu23(K->mu nu)\t\t\t%.3e\n\n",Rmu23(&param));

	return 1;
}
示例#4
0
int main(int np, char** p)
{
  double * current, *error;
  double * current_pre, *error_pre;//preliminary input
  int i,j,k,t;
  FILE* file_in_current;
  FILE* file_in_matrix;
  FILE* file_out;
  FILE* file_out_excl;
  FILE* file_const;
  int par_int;
  double par_double;
  double int_result, int_error;
  double center;
  double omega;
  
  
  gsl_vector * R;
  gsl_vector * omega_R; //for real center definition

  gsl_vector * Q;

  gsl_vector * Q_initial;

  gsl_matrix * S;//covariance matrix
  gsl_matrix * S_pre;//covariance matrix (preliminary input)

  file_in_current=fopen(p[2],"r");
  file_in_matrix=fopen(p[3],"r");
  sprintf(directory,"%s", p[4]);
  Nt_2=atoi(p[1]);
  dNt_2=(double) Nt_2;
//reading parameters file
  file_const=fopen(p[5],"r");
  
//double accuracy=1e-8;
parse_option(file_const,"%le",&accuracy);
//long int N_int_steps=1000000;
parse_option(file_const,"%ld",&N_int_steps);
//double omega_plot_delta=0.01;
parse_option(file_const,"%le",&omega_plot_delta);
//double omega_plot_limit=30.0;
parse_option(file_const,"%le",&omega_plot_limit);
//double lambda=1.0;
parse_option(file_const,"%le",&lambda);
//double center_start=3.0;
parse_option(file_const,"%le",&center_start);
//double center_stop=18.01;
parse_option(file_const,"%le",&center_stop);
//double center_delta=3.0;
parse_option(file_const,"%le",&center_delta);
//int flag_exclude
parse_option(file_const,"%d",&flag_exclude_delta);
//int count_start
parse_option(file_const,"%d",&count_start_exclude);
//int flag_model
parse_option(file_const,"%d",&flag_model);
if(flag_model==1)
{
  fscanf(file_const, "%d", &N_valid_points);
  points_numbers=(int*) calloc(N_valid_points, sizeof(int));
  for(i=0;i<N_valid_points; i++)
    fscanf(file_const, "%d", &(points_numbers[i]));
}
else
{
  N_valid_points=Nt_2;
  points_numbers=(int*) calloc(N_valid_points, sizeof(int));
  for(i=0;i<N_valid_points; i++)
    points_numbers[i]=i+1;
}


  fclose(file_const);

file_out=fopen_control("parameters.txt","w");
fprintf(file_out,"number of points (=half of physical number of timeslices)=%d\n", Nt_2);

fprintf(file_out,"file with current correlator:\n %s\n", p[2]);
fprintf(file_out,"file with covariance matrix:\n %s\n", p[3]);
fprintf(file_out,"path for output:\n %s\n", p[4]);
fprintf(file_out,"file with parameters:\n %s\n", p[5]);




//double accuracy=1e-8;
fprintf(file_out,"accuracy=%.15le\n",accuracy);
//long int N_int_steps=1000000;
fprintf(file_out,"Number os steps in numerical interation=%ld\n",N_int_steps);
//double omega_plot_delta=0.01;
fprintf(file_out,"Step in plots of resolution function(omega)=%.15le\n",omega_plot_delta);
//double omega_plot_limit=30.0;
fprintf(file_out,"Limit in plots of resolution function(omega)=%.15le\n",omega_plot_limit);
//double lambda=1.0;
fprintf(file_out,"Lambda(regularization)=%.15le\n(=1 - without regularization)\n",lambda);
//double center_start=3.0;
fprintf(file_out,"Center of resolution function starts from = %.15le\n",center_start);
//double center_stop=18.01;
fprintf(file_out,"Center of resolution function stops at %.15le\n",center_stop);
//double center_delta=3.0;
fprintf(file_out,"Step in center of resolution function = %.15le\n",center_delta);
//flag_exclude_delta;
fprintf(file_out,"TExclude or not (1 or 0) initial delta finction %d\n",flag_exclude_delta);
//count_start_exclude
fprintf(file_out,"Number of iteration for center to start exclusion of initial delta-function = %d\n",count_start_exclude);
//model_flag;
fprintf(file_out,"Take into account all (0)  or not all (1) timeslices = %d\n",flag_model);
if(flag_model==1)
{
  fprintf(file_out,"Number of timeslices taken into account = %d\n",N_valid_points);
  for(i=0;i<N_valid_points;i++)
  {
    fprintf(file_out,"%d\n",points_numbers[i]);
  }
}
fclose(file_out);


  current_pre=(double*) calloc(Nt_2, sizeof(double));
  error_pre=(double*) calloc(Nt_2, sizeof(double));

  S_pre=gsl_matrix_calloc(Nt_2, Nt_2);

  for(t=1;t<=Nt_2;t++)
  {
    fscanf(file_in_current, "%d", &par_int);
    fscanf(file_in_current, "%le", &par_double);
    current_pre[t-1]=par_double;
    
    fscanf(file_in_current, "%le", &par_double);
    error_pre[t-1]=par_double;
  }
  fclose(file_in_current);

  file_out=fopen_control("current_control_pre.txt","w");
  for(t=0;t<Nt_2;t++)
  {
    fprintf(file_out,"%d\t%.15le\t%.15le\n", t, current_pre[t], error_pre[t]);
  }
  fclose(file_out);

  for(i=1;i<=Nt_2;i++)
  for(t=1;t<=Nt_2;t++)
  {
    fscanf(file_in_matrix, "%le", &par_double);
    gsl_matrix_set(S_pre, i-1, t-1, par_double);

  }
  fclose(file_in_matrix);

  file_out=fopen_control("cov_matrix_control_pre.txt","w");
  for(i=0;i<Nt_2;i++){
  for(t=0;t<Nt_2;t++)
  {
    fprintf(file_out,"%.15le\t", gsl_matrix_get(S_pre, i,t));
  }
  fprintf(file_out,"\n");
  }
  fclose(file_out);
//conversion to real arrays taken into account only certain timeslices
///////////////////////////////////////////
///////////////////////////////////////////
///////////////////////////////////////////
{ 
  int count1, count2;
  Nt_2_pre=Nt_2;
  dNt_2_pre=(double) Nt_2_pre;
  if(flag_model==1)
  {
    Nt_2=N_valid_points;
    dNt_2=(double)Nt_2;
  } 
  current=(double*) calloc(Nt_2, sizeof(double));
  error=(double*) calloc(Nt_2, sizeof(double));

  S=gsl_matrix_calloc(Nt_2, Nt_2);

  for(count1=0;count1<Nt_2;count1++)
  {
    current[count1]=current_pre[points_numbers[count1]-1];
    error[count1]=error_pre[points_numbers[count1]-1];
  }
  fclose(file_in_current);

  file_out=fopen_control("current_control_fin.txt","w");
  for(t=0;t<Nt_2;t++)
  {
    fprintf(file_out,"%d\t%.15le\t%.15le\n", points_numbers[t], current[t], error[t]);
  }
  fclose(file_out);

  for(count1=0;count1<Nt_2;count1++)
  for(count2=0;count2<Nt_2;count2++)
  {
    par_double=gsl_matrix_get(S_pre,points_numbers[count1]-1, points_numbers[count2]-1);
    gsl_matrix_set(S, count1, count2, par_double);
  }
  fclose(file_in_matrix);

  file_out=fopen_control("cov_matrix_control.txt","w");
  for(i=0;i<Nt_2;i++){
  for(t=0;t<Nt_2;t++)
  {
    fprintf(file_out,"%.15le\t", gsl_matrix_get(S, i,t));
  }
  fprintf(file_out,"\n");
  }
  fclose(file_out);
}
//end of conversion
///////////////////////////////////////////
///////////////////////////////////////////
///////////////////////////////////////////



//integration to obtain R vector
  file_out=fopen_control("R_control.txt","w");
  
  R=gsl_vector_alloc(Nt_2);
{
  gsl_integration_workspace * w  = gsl_integration_workspace_alloc (N_int_steps);
  gsl_function F;
  F.function = &kernel_int;
  for(t=1;t<=Nt_2;t++)
  {
    F.params = &t;
    gsl_integration_qagiu (&F, 0.0, accuracy, accuracy, N_int_steps, w, &int_result, &int_error); 
    gsl_vector_set(R,t-1,int_result);
    fprintf(file_out,"%d\t%.15le\t%.15le\n", t, int_result, int_error); fflush(file_out);
  }
  gsl_integration_workspace_free (w);

}
  fclose(file_out);
///////
//integration to obtain omega_R vector
  file_out=fopen_control("omega_R_control.txt","w");
  
  omega_R=gsl_vector_alloc(Nt_2);
{
  gsl_integration_workspace * w  = gsl_integration_workspace_alloc (N_int_steps);
  gsl_function F;
  F.function = &omega_kernel_int;
  for(t=1;t<=Nt_2;t++)
  {
    F.params = &t;
    gsl_integration_qagiu (&F, 0.0, accuracy, accuracy, N_int_steps, w, &int_result, &int_error); 
    gsl_vector_set(omega_R,t-1,int_result);
    fprintf(file_out,"%d\t%.15le\t%.15le\n", t, int_result, int_error); fflush(file_out);
  }
  gsl_integration_workspace_free (w);

}
  fclose(file_out);
///////


  {
  int count_center=0;
  double C, C0;
  gsl_vector* Q_real;
  Q_initial=gsl_vector_calloc(Nt_2);
  for(center=center_start; center<=center_stop; center+=center_delta)
  {
    double center_real=center/(2.0*dNt_2_pre);
    double center_calculated=0.0;
    double center_calculated_real=0.0;
    char file_name[1000];
    sprintf(file_name,"delta_function_c=%3.3leT.txt", center);
    Q=gsl_vector_calloc(Nt_2);
    Q_real=gsl_vector_calloc(Nt_2);
    calculate_Q(Q, R, S, center_real);
    if(count_center==0)
    {
      for(i=0;i<Nt_2;i++)
        gsl_vector_set(Q_initial, i, gsl_vector_get(Q,i));
    }
    if(count_center==0)
    {
      for(i=0;i<Nt_2;i++)
        gsl_vector_set(Q_real, i, gsl_vector_get(Q,i));
    }
    else
    {
      if(flag_exclude_delta==1 && count_center>=count_start_exclude)
      {
        FILE* log_exclusion;
        log_exclusion=fopen_log("log_exclusion.txt","a", center_real);
        C=delta0(Q);
        C0=delta0(Q_initial);
        fprintf(log_exclusion,"C=%.15le\nC0=%.15le\n",C,C0);fflush(log_exclusion);
        
        for(i=0;i<Nt_2;i++)
          gsl_vector_set(Q_real, i, gsl_vector_get(Q,i)-(C/C0)*gsl_vector_get(Q_initial,i));
        
        //normalization
        double new_norma=0.0;
        for(i=0;i<Nt_2;i++)
        {
          new_norma += gsl_vector_get(Q_real, i) * gsl_vector_get(R,i);
        }
        fprintf(log_exclusion, "norma_old=%.15le\n", new_norma);fflush(log_exclusion);
        
        for(i=0;i<Nt_2;i++)
        {
          gsl_vector_set(Q_real,i,gsl_vector_get(Q_real, i)/new_norma );
        }
        new_norma=0.0; 
        for(i=0;i<Nt_2;i++)
        {
          new_norma += gsl_vector_get(Q_real, i) * gsl_vector_get(R,i);
        }
        fprintf(log_exclusion, "norma_new=%.15le\n", new_norma);fflush(log_exclusion);
        
        fclose(log_exclusion);     
      }
      else
      {
        for(i=0;i<Nt_2;i++)
        gsl_vector_set(Q_real, i, gsl_vector_get(Q,i));
      }
    }
    //delta function output
    file_out=fopen_control(file_name,"w");
    for(omega=0;omega<omega_plot_limit/(2.0*dNt_2_pre);omega+=omega_plot_delta/(2.0*dNt_2_pre))
    {
      fprintf(file_out,"%.15le\t%.15le\t%.15le\n", omega*2.0*dNt_2_pre, delta(omega,Q), delta(omega, Q_real));
      fflush(file_out);
    }
    fclose(file_out);
    
    //output of dimensionless spectral function
    double rho, rho_stat_err, width;
    double rho_real, rho_stat_err_real, width_real;
//values to really characterize delta functions 
double start, stop, center1, width1;
double real_start, real_stop, real_center1, real_width1;


    file_out=fopen_control("rho.txt", "a");
    file_out_excl=fopen_control("rho_excl.txt", "a");
    calculate_rho(Q, current, error, &rho, &rho_stat_err);
    width=delta_width_calculation(Q, center_real);

    delta_characteristics_calculation(&start, &stop, &center1, Q, center_real);
    width1=(stop-start)/2.0;

    calculate_rho(Q_real, current, error, &rho_real, &rho_stat_err_real);
    width_real=delta_width_calculation(Q_real, center_real);

    delta_characteristics_calculation(&real_start, &real_stop, &real_center1, Q_real, center_real);
    real_width1=(real_stop-real_start)/2.0;


    fprintf(file_out,"%.15le\t%.15le\t%.15le\t%.15le\t%.15le\t%.15le\n", center, width*2.0*dNt_2_pre, center1, width1, rho, rho_stat_err);
    fprintf(file_out_excl,"%.15le\t%.15le\t%.15le\t%.15le\t%.15le\t%.15le\n", center, width_real*2.0*dNt_2_pre, real_center1, real_width1,  rho_real, rho_stat_err_real);
    
    fclose(file_out);
    fclose(file_out_excl);
    gsl_vector_free(Q);
    gsl_vector_free(Q_real);
    count_center++;
  }
  gsl_vector_free(Q_initial);
  }
  gsl_vector_free(R);
  gsl_vector_free(omega_R);
  gsl_matrix_free(S);
  gsl_matrix_free(S_pre);
  
  free(current);
  free(error);

  free(current_pre);
  free(error_pre);

  if(flag_model==1)
    free(points_numbers);
  return 0;
}